2012-08-23 32 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,去吧。 :-)在平板电脑上回答问题的不幸的不利之处在于,提供冗长的答案是很痛苦的。 :-( –