2012-08-23 41 views
0

當前我正試圖運行一個測試,當正在寫入文件時會突然關閉機器。當發生掉電時,數據的最後部分不存在,因爲它在掉電之前永遠不會刷新到磁盤。Powershell中的直接無緩衝寫入

Perl(在Linux中)允許以下列方式打開文件時進行直接非緩衝寫入。

sysopen(F, $file, O_WRONLY|O_DIRECT) or die "Couldn't direct open file $file\n"; 

這允許數據被寫入,直到最後一個字符機器遇到由於某種原因而崩潰。同樣,對於Windows,C++允許在使用「FILE_FLAG_NO_BUFFERING」標誌打開文件進行寫入時進行直接寫入。

如何允許使用powershell直接/無緩衝寫入磁盤?

回答

1

您可以下拉到.NET並使用FileStream對象來寫入文件。使用接受FileOptions和try the FileOptions.WriteThrough枚舉值,例如構造:

$fileStream = New-Object System.IO.FileStream($file, 
    [System.IO.FileMode]::Create, 
    [System.Security.AccessControl.FileSystemRights]::Modify, 
    [System.IO.FileShare]::None, 
    1, 
    [System.IO.FileOptions]::WriteThrough) 
+0

一個例子:'$ FILESTREAM =新物體System.IO.FileStream($文件,[System.IO.FileMode] ::創建,[ System.Security.AccessControl.FileSystemRights] :: Modify,[System.IO.FileShare] :: None,1,[System.IO.FileOptions] :: WriteThrough)'。我對編輯32.8k用戶的答案感到不夠自信。 –

+1

@SimonMcKenzie Bah,去吧。 :-)在平板電腦上回答問題的不幸的不利之處在於,提供冗長的答案是很痛苦的。 :-( –