2012-11-15 4 views
1

사용자가 정보를 제출할 때 로그 파일에 데이터를 쓰고 있습니다. 사무실 내의 다른 사용자는이 로그 파일을 볼 필요가 있지만 사무실 사용자가 파일을 열었을 때 더 많은 정보가 제출되면 로그 파일에 계속 기록 할 수 없습니다. 다른 사용자가 파일의 인스턴스를 연 경우에도 계속 파일에 쓰는 방법이 있습니까?다른 사용자가 파일을 여는 경우 FileStream/StreamWriter

using(StreamWriter writer = new StreamWriter(@"\\filelocation\filename.csv")) 
{ 
    writer.WriteLine("Testing, testing"); 

    writer.Close(); 
} 
+2

닫지 마십시오. –

+0

옙 ... Writer.Close를 치워라 ( – Derek

+0

) 나는 그것이 중복이라는 것을 안다. 그러나 나는 추가 된 실패 안전으로 Close를 넣는 법을 배웠다. 어쩌면 추천하지는 않지만 내 질문과 관련이 없습니다. – jmease

답변

0

로그 파일을 계속 작성해야하는 경우 추적을 사용 하시겠습니까? Trace에 "listener"를 첨부 할 수 있습니다.

물론
Trace.Listeners.Add(new TextWriterTraceListener("myfilename.txt")); 

당신이 파일 이름을 전달하면, 그것의 autoflush하지 않으며, 그것은 종료, 또는 버퍼가 가득 때까지 아무것도 파일에 없습니다. 따라서 프로그램 시작시 스트림을 만들 수 있습니다.

FileInfo fi = new FileInfo("myLogFile.txt"); 
StreamWriter _sw; 

void Main() 
{ 
    _sw = fi.CreateText(); 
    _sw.AutoFlush = true; 
    Trace.Listeners.Add(new TextWriterTraceListener(sw)); 
} 

void Close() 
{ 
    if(_sw != null) 
    { 
     _sw.Flush(); 
     _sw.Dispose(); 
    } 
} 

그런 다음 프로그램에서 "로그"에 대한 각 쓰기에 대해 파일을 열고 닫는 대신이 작업을 수행 할 수 있습니다.

Trace.WriteLine("My message here"); 

추적은 내가 찾은

Trace.WriteLine("My message here", "INFO"); 

//Output: 
//INFO: My message here 

한 것은 일부 시스템에 텍스트 파일을 열 수 없다는 것입니다 ... 로그를 위해 중대하다 너무 범주라는 멋진 일을 가지고 있지만, 파일을 열어 복사본을 만들 수 있으며 원본 파일이 계속 채워집니다.

+0

이 답변은 내 머리 위로 조금이지만 지금까지 제공되는 가장 완벽한 솔루션 인 것 같습니다. 나는 streamwriter가 결코 동일한 파일에 두 번 쓰려고 시도하지 않도록 특정 제출에 timestamped 된 별도의 csv 파일을 만드는 것을 끝내었다. – jmease

관련 문제