Wie kann man einfach eine Datei ohne Programmhilfe in C-Sprache / etc im geöffneten Zustand halten, indem die grundlegenden Funktionen von Windows verwendet werden?

489
cuda

Warum kopiert robocopy immer noch eine geöffnete Datei, die vom txt-Editor in Windows geöffnet wird?

Neben der obigen Frage: Wie kann es die einfachste Möglichkeit sein, eine Datei in einer nackten Windows-Umgebung wie Server 2016 geöffnet zu halten, um die Robocopy-Eigenschaften anzuzeigen, die das Kopieren geöffneter Dateien oder das Anzeigen von Fehlern zu Testzwecken verhindern.

entweder durch Batch oder eine andere in Windows Server vorhandene Funktion kann akzeptiert werden

VBS etw funktioniert nicht

Setze MyFile = fso.OpenTextFile (Dateiname, ForWriting, True)

Do MyFile.WriteLine "Hallo Welt!" Schleife

0

1 Antwort auf die Frage

0
grawity

Kopiert von Warum Robocopy noch eine geöffnete Datei kopieren, von txt editor in Fenster geöffnet

Windows hat von MS-DOS das Konzept der "Freigabemodi" als einfache Form der Dateisperre geerbt. Beim Öffnen einer Datei können Sie auswählen, ob Sie sie zum Lesen / Schreiben, nur zum Lesen oder gar nicht freigeben möchten. Einige Skriptinterpreter verwenden immer "share all".

Sie können jedoch jede .NET-Laufzeitsprache und die 4-Parameter- Funktion System.IO.File.Open () verwenden. Wahrscheinlich hat Ihr Windows-System einen C # -Compiler (csc.exe), der irgendwo versteckt ist. Heutzutage ist es einfacher, dies in PowerShell zu tun:

$fh = [System.IO.File]::Open($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::None) 

Der vierte Parameter kann ein beliebiger System.IO.FileShare-Enumerationswert sein, beispielsweise:

  • [System.IO.FileShare]::None - nichts teilen
  • [System.IO.FileShare]::Read - Share lesen (Block schreiben / löschen)
  • [System.IO.FileShare]::ReadWrite - Lesen / Schreiben teilen (Block löschen)

Wenn du fertig bist:

$fh.Close()