2017-03-16 1 views
2

매분마다 파일에 쓰는 응용 프로그램이 있습니다. 때때로 (10 분 간격으로 +는 -) 나는 충분한 공간이C# "디스크에 충분한 공간이 없습니다"실제로는

내 응용 프로그램을 Windows Forms 응용 프로그램입니다 디스크에 없다 오류

얻을. 나는 google에 많은 기사를 읽었다 그러나 저에게 그것을 고치는 방법 어떤 결과도주지 않았다.

예외 :

예외 발생 : 'System.IO.IOException'을가 mscorlib.dll에서

내 코드 :

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}"); 
} 

디스크에 내 총 여유 공간이 74기가바이트입니다 . 프로그램을 마지막으로 실행하기 전에 조각 모음을 수행했습니다.

이 오류를 제거하려면 어떻게해야합니까?

감사

편집 : Screen available here

EDIT2 : 스택 트레이스

당신의 예외 스택에서 흥미로운 무엇
 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() 

link to another screen

+1

얼마나 쓰려고합니까? –

+0

작성하려는 위치는 어디입니까? –

+0

오류가 발생하면 약 100k 제품 (40MB)이 발생했을 것입니다. 지금 제로에서 시작하고 .. 열세 .. 250 제품 및 나는 오류 (50kb 아마) – user1085907

답변

1

, 당신은의 "를 호출 할 때 오류가 발생한다는 것입니다 Close "메서드를 호출하고 내부적으로"Flush "를 호출합니다. 그러나 코드에서 이전 줄에 명시 적으로 "Flush"를 명시 적으로 호출했습니다. 그래서 명시적인 "Flush()"호출에 저장 예외가 발생할 것으로 예상됩니다. 실제 오류 이유에 대한 의구심이 생깁니다. 내가하려고 시도하는 것 : 1. disposables를 "using"블록으로 묶으십시오. 2. Dispose/Close 중에 메서드가 호출되기 때문에 "Flush()"를 명시 적으로 호출하지 마십시오.

여전히 실패하는 경우 데이터를 쓰기 전에 쓰기를 시도하는 드라이브의 현재 여유 공간을 기록하십시오. 다음 방법을 사용하면 도움이됩니다.

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

희망이 도움이 될 것입니다.

+0

좋아, 고마워. :) – user1085907

관련 문제