如果我将带有StreamWriter的文件写入完整的硬盘驱动器会发生什么?

时间:2015-10-16 15:12:17

标签: c# logging streamwriter hard-drive

我正在使用Josh Close类的StreamWriterCsvHelper向我的硬盘驱动器写入许多.csv文件来记录一些测量数据:

using (TextWriter writer = new StreamWriter(path,true))
using (CsvWriter = new CsvWriter(writer))
{
    writer.WriteLine("1...");
    /// ...
    /// ...
    /// ...
    writer.Flush();
}

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

2 个答案:

答案 0 :(得分:1)

它会抛出一个新的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;
}

答案 1 :(得分:0)

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

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