我正在使用Josh Close类的StreamWriter
和CsvHelper
向我的硬盘驱动器写入许多.csv文件来记录一些测量数据:
using (TextWriter writer = new StreamWriter(path,true))
using (CsvWriter = new CsvWriter(writer))
{
writer.WriteLine("1...");
/// ...
/// ...
/// ...
writer.Flush();
}
一夜之间他们可以存储多达500 MB的数据。所以今天这个问题困扰我:如果我的硬盘驱动器或USB驱动器没有更多的空白空间并且我想写一个新文件会怎么样?什么是防止这种情况的最佳做法?这会抛出异常吗?我在.NET文档中没有发现这种情况。
答案 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)
您应该保留单独的滚动文件,当您的硬盘变满时可以删除旧文件(永远不要等待它发生!)。
检查剩余的驱动器空间与您需要写入的数据,并在实际空间不足之前执行删除。