如果磁盘已满,是否会抛出IO异常?

时间:2010-01-11 13:44:28

标签: c# .net

尝试编写文件但磁盘已满时,.NET Framework中会抛出什么异常?

Windows缓冲文件是否写入?

3 个答案:

答案 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中被镜像,这就是为什么支票中几乎重复的错误代码。