尝试编写文件但磁盘已满时,.NET Framework中会抛出什么异常?
Windows缓冲文件是否写入?
答案 0 :(得分:6)
您将获得IO异常:
System.IO.IOException: There is not enough space on the disk.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
System.IO
库处理读取和写入磁盘的实际任务,并将它们包装在托管代码中,因此您不应该使用它们获取任何非托管异常。
这也是值得尝试的(使用其中一个粗制的小型USB棒,他们随处可见)看看你的代码会发生什么 - 这通常是找到这种东西的最好方法。
答案 1 :(得分:0)
你可以在看不到它提供更多详细信息之后检查Win 32 Exception:
Win32Exception ex = new Win32Exception();
string low_level_error = ex.Message;
你是如何写入磁盘的?对于FileStream,它说:
“务必打开Dispose方法 所有FileStream对象,特别是在 磁盘空间有限的环境。 执行IO操作可以提高 如果没有磁盘空间则例外 可用,Dispose方法是 在FileStream之前没有调用 已完成“。
答案 2 :(得分:0)
您将收到“ IOException”。但是问题是“ IOException”的范围很广,不仅磁盘已满。我建议也检查内部的“ HResult”以精确过滤这种情况。
catch (IOException ioEx)
{
// Is it 'DISK_FULL'?
uint unsignedResult = (uint)ioEx.HResult;
if (unsignedResult.IsOneOf(0x80000027, 0x80000070, 0x80070027, 0x80070070))
{
// Remove the partial file
try
{
File.Delete(pathName);
}
catch { }
// do your special stuff here
}
else
throw;
}
请注意,来自区域8000的Win32错误代码在区域8007中被镜像,这就是为什么支票中几乎重复的错误代码。