Wie @fejyesynb richtig bemerkt, behält Notepad keinen aktiven Dateihandle bei. Er öffnet die Datei, liest (oder schreibt) die Daten schnell und schließt die Datei wieder. Die Daten werden auf dem Bildschirm angezeigt, aber die Datei wird tatsächlich die ganze Zeit geschlossen.
Zweitens hat Windows von MS-DOS das Konzept der "Freigabemodi" als eine einfache Form der Dateisperrung 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.
Wenn Ihr Programm (Robocopy) beispielsweise die Datei zum Lesen öffnen möchte (FileAccess.Read), ist es nur erfolgreich, wenn alle vorhandenen Dateihandles den Freigabemodus "Lesen" zulassen (oder wenn keine offenen Dateihandles vorhanden sind.) alles). Wenn die Datei jedoch mit "share none" geöffnet wurde, wird "File in use" angezeigt, wenn Sie versuchen, sie zu einem beliebigen Zweck zu öffnen .
Sie können dies in PowerShell durchführen, indem Sie die untergeordnete .NET- Funktion System.IO.File.Open () aufrufen :
$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()