如果我使用 StreamWriter 将文件写入一个完整的硬盘驱动器,会发生什么情况?
What will happen if I write a file with StreamWriter to a full hard drive?
我正在将许多 .csv 文件写入我的硬盘驱动器,以使用来自 Josh Close class:
的 StreamWriter
和 CsvHelper
记录一些测量数据
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;
}
我正在将许多 .csv 文件写入我的硬盘驱动器,以使用来自 Josh Close class:
的StreamWriter
和 CsvHelper
记录一些测量数据
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;
}