【发布时间】:2010-06-29 22:54:24
【问题描述】:
我有一个程序可以打开一个大的二进制文件,向其中添加少量数据,然后关闭该文件。
FileStream fs = File.Open( "\\\\s1\\temp\\test.tmp", FileMode.Append, FileAccess.Write, FileShare.None );
fs.Write( data, 0, data.Length );
fs.Close();
如果在本程序运行前test.tmp为5MB,数据数组为100字节,本程序将导致超过5MB的数据通过网络传输。我本来希望文件中已经存在的数据不会通过网络传输,因为我没有读取或写入它。有什么办法可以避免这种行为?这使得附加到非常大的文件变得非常缓慢。
【问题讨论】:
-
您是否尝试过 FileStream.Seek 方法?
-
是否有激活的防病毒扫描程序进行访问检查?
-
您可能会添加一些关于您的最终目标的信息(即日志系统或数据报告工具),因为这里的用户可能会提出一些您可能没有考虑过的建议。
-
@ChrisW:
FileMode.Append在内部调用 Seek。 -
从我使用 598MB 文件的测试来看,我相信您还有其他问题。问题不在于您发布的代码。第一次运行时,在清除所有系统缓存后,写入前 100 个字节最多可能需要 7 秒钟,而读取的内容不超过 256KB(这可能是流的缓冲区填充)。随后的写入需要 80 毫秒、24 毫秒,最后是 3 毫秒。无论我指定什么 FileMode 和 FileAccess 选项。
标签: c# .net file-io networking