2012-11-29 4 views
3

파일 배열에 문자열을 쓰려고하는데, 일반적으로 쉬운 일입니다. 그러나 다음과 같은 간단한 코드는 파일이 다른 프로세스에서 사용되고 있음을 알리는 IOException을 던지고 있습니다. 문제는이 코드가 실행될 때까지 파일이 존재하지 않는다는 것입니다. 그리고 파일을 사용하는 다른 프로세스가 없다는 것을 보증 할 수 있습니다. 그렇다면 어떻게 그 파일이 다른 프로세스에서 사용되지 않고 계속 진행할 수 있다는 어리석은 .NET 프레임 워크를 납득시킬 수 있습니까? 왜냐하면 이것은 정말로 그렇게 어려운 것이 아니기 때문입니다.왜 작동하지 않습니까?

StreamWriter writer = new StreamWriter(ListFileName); 

foreach (string s in InfoLineList) 
{ 
    writer.WriteLine(s); 
} 
+0

방금'File.WriteAllLines (경로, InfoListList)를 사용할 수' ? 어쩌면 파일 잠금 문제는 피할 수 있습니다. –

+0

나는 할 수 있었다. 그러나 나는 정말로 파일이 다른 곳에서 열려 있다고 생각하는 이유를 알고 싶습니다. –

+0

좋아요, WriteAllLines을 사용하도록 변경했습니다. 이제 작동합니다. 나는 왜 그것이 다른 방식으로 작동하지 않는지 아직도 이해하지 못합니다. 누군가가 저에게 설명 할 수 있다면 감사 하겠지만, WriteAllLines은 작동합니다. –

답변

4

이 작업을 완료하면 스트림을 닫지 않아서 어딘가에서 손잡이가 열리게됩니다. 아마도 코드는 웹 앱의 일부이며, 웹 서버 프로세스는이 잠금을 계속 유지하거나 코드가 여러 번 실행됩니다. 나는 using 블록 스트림을 사용하는 것이 좋습니다 것 :

using(StreamWriter writer = new StreamWriter(ListFileName)) 
{ 
    foreach (string s in InfoLineList) 
    { 
     writer.WriteLine(s); 
    } 
} 

이것은 StreamWriter가 제대로 설치되어 있는지 확인합니다.

정말로 파일이 열려 있는지 확인하려면 SysInternal's Handle tool을 사용하십시오. 나는 그것이 당신 자신의 프로그램이라고 내기를 기꺼이 할 것입니다. 내 의견에 말했듯이

마지막으로는 File.WriteAllLines() 방법은 한 번에 파일에 문자열의 열거 목록을 작성할 수 있습니다

File.WriteAllLines(ListFileName, InfoListList); 
+0

+1 "using"문. –