C# “c”;磁盘上没有足够的空间;事实上是有

C# “c”;磁盘上没有足够的空间;事实上是有,c#,filestream,diskspace,C#,Filestream,Diskspace,我有一个每分钟都要写入文件的应用程序。有时(每10分钟+-)我会出错 磁盘上没有足够的空间 我的应用程序是Windows窗体应用程序。我读了很多关于谷歌的文章,但没有告诉我如何修复它 例外情况: 引发异常:mscorlib.dll中的“System.IO.IOException” 我的代码: try { FileStream stream = new FileStream(file, FileMode.CreateNew); FileStream stream2 = new Fi

我有一个每分钟都要写入文件的应用程序。有时(每10分钟+-)我会出错

磁盘上没有足够的空间

我的应用程序是Windows窗体应用程序。我读了很多关于谷歌的文章,但没有告诉我如何修复它

例外情况:

引发异常:mscorlib.dll中的“System.IO.IOException”

我的代码:

try
{
    FileStream stream = new FileStream(file, FileMode.CreateNew);
    FileStream stream2 = new FileStream(file2, FileMode.CreateNew);
    BinaryFormatter writer = new BinaryFormatter();

    writer.Serialize(stream, GetProducts().Take(80000).ToList());
    writer.Serialize(stream2, GetProducts().Skip(80000).ToList());
    stream.Flush();
    stream.Close();
    stream2.Flush();
    stream2.Close();
}
catch(Exception ex)
{
    Debug.WriteLine($"FAIL to write: {i} - {ex.Message}");
}
我的磁盘总可用空间是74GB。在上次运行程序之前,我做了碎片整理

我该如何摆脱这个错误呢

谢谢

编辑:

编辑2:Stacktrace

     at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
     at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count)
     at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer)
     at System.IO.FileStream.Dispose(Boolean disposing)
     at System.IO.FileStream.Finalize()

从异常堆栈中有趣的是,当您调用“Close”方法时会发生错误,而它在内部调用“Flush”。但是,您已经成功地在代码的前一行显式调用了“Flush”。因此,我希望在显式的“Flush()”调用中引发存储异常。 这引起了对实际错误原因的怀疑。我将尝试做的是: 1.将一次性用品包在“使用”块中 2.不要显式调用“Flush()”,因为在Dispose/Close期间仍将调用该方法

如果仍然失败,请尝试在写入数据之前记录您尝试写入的驱动器的当前可用空间。以下方法将有助于您做到这一点:

    private static long GetAvailableSpace(string path)
    {
        string drive = Path.GetPathRoot(Path.GetFullPath(path));
        DriveInfo driveInfo = new DriveInfo(drive);
        return driveInfo.AvailableFreeSpace;
    }

希望这能有所帮助。

您要写多少?要写到什么位置?如果您认为这是不应该发生的事情,您可以尝试实施重试策略。不要处理所有异常,有一种方法可以确定。你能显示堆栈跟踪吗?还有,你的临时文件夹中有多少空间(配额)?我不确定BinFormatter是如何工作的,但它的一些同类将生成临时文件。