如果我使用 StreamWriter 将文件写入一个完整的硬盘驱动器,会发生什么情况?

What will happen if I write a file with StreamWriter to a full hard drive?

我正在将许多 .csv 文件写入我的硬盘驱动器,以使用来自 Josh Close class:

StreamWriterCsvHelper 记录一些测量数据
using (TextWriter writer = new StreamWriter(path,true))
using (CsvWriter = new CsvWriter(writer))
{
    writer.WriteLine("1...");
    /// ...
    /// ...
    /// ...
    writer.Flush();
}

一夜之间最多可存储 500 MB 的数据。所以今天这个问题困扰着我:如果我的硬盘或 USB 驱动器不再空 space 并且我想写一个新文件会怎样?防止这种情况的最佳做法是什么?这会抛出异常吗?我在 .NET 文档中没有发现任何关于这种情况的信息。

您应该保留单独的滚动文件,当您的硬盘变满时可以删除较旧的文件(永远不要等待这种情况发生!)。

检查剩余的驱动器 space 与您需要写入的数据,并在实际 运行 出 space 之前执行删除。

它将抛出一个新的IOException。您可以像这样检查异常是否为磁盘已满(磁盘已满检查取自 here

try
{
    //Write stuff to disk
}
catch(IOException ex)
{
    if(IsDiskFull(ex))
    {
        //Disk is full
    }
}


public static bool IsDiskFull(Exception ex)
{
    const int ERROR_HANDLE_DISK_FULL = 0x27;
    const int ERROR_DISK_FULL = 0x70;

    int win32ErrorCode = Marshal.GetHRForException(ex) & 0xFFFF;
    return win32ErrorCode == ERROR_HANDLE_DISK_FULL || win32ErrorCode == ERROR_DISK_FULL;
}