我有以下 C# 代码:
private const int APPENDBUFFERSIZE = 65536;
private StreamWriter _streamWriter;
private FileStream _fileStream;
private BufferedStream _bufferedStream;
public void Open(string fileName)
{
_fileStream = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.Read);
_bufferedStream = new BufferedStream(_fileStream, APPENDBUFFERSIZE);
_streamWriter = new StreamWriter(_bufferedStream);
}
public void Write(string data)
{
_streamWriter.Write(data);
}
public void Close()
{
if (_streamWriter != null)
{
_streamWriter.Flush();
_streamWriter.Dispose();
_streamWriter = null;
}
if (_bufferedStream != null)
{
_bufferedStream.Dispose();
_bufferedStream = null;
}
if (_fileStream != null)
{
_fileStream.Dispose();
_fileStream = null;
}
}
为什么在我调用 Close 之前数据不会写入磁盘?技术数据:我写了 9000 KB 的数据
StreamWriter
类有:
internal const int DefaultBufferSize = 1024;
FileStream
类有:
internal const int DefaultBufferSize = 4096;
BufferedStream
应该是65536
字节。
filename
是我本地驱动器 D 上文件的完整路径。
filename = "D:\\Folder1\Folder2\\file.txt"
而且我确实有权写入它。对于一个电话,Write
我使用类似的东西:
data = "1234567889|ababababababababbabababababababababababab"
另外,我不想摆脱缓冲区,我只想不时刷新流,然后在磁盘上看到它。有文件很奇怪,0 KB
当你关闭时突然间,它很大。因此,通过所有测量,除非写入下一个流/磁盘,否则所有缓冲区都应该溢出。尽管如此,Windows 仅显示大于0 KB
, after的文件大小Close
,尽管我在写入文件完成后等待了几分钟。
有任何想法吗?
谢谢,西普里安。
更新:大小在 Windows 资源管理器大小列中显示为 0。如果我查看文件属性,则大小大于 0(这是正确的)。从属性窗口返回并刷新 Windows 资源管理器窗口后,大小列更新为大于 0 的值。我只是刷新 Windows 资源管理器窗口而不查看文件属性,大小列保持在 0。另外,如果我打开带有记事本++的文件,它包含所有数据,并且在Windows资源管理器窗口中刷新会在大小列中显示正确的值。所以我的问题可能不是因为我写的代码,但你永远不知道。