2010-02-03 2 views
3

CreateText 메서드를 사용하여 "App1"에 빈 파일을 만듭니다 (아래 참조). 그런 다음 다른 응용 프로그램에서 해당 파일에 쓰려고했지만 b/c가 잠겼습니다.에서 .Net은 File.CreateText()를 사용하여 파일을 잠그는 이유는 무엇입니까?

Dim sw As StreamWriter = File.CreateText(path) 
sw.Close() 

왜 전화 그냥 파일을 잠글 CreateText 않습니다 : 나는 "앱 1"

File.CreateText(path) 

내가이 작업을 수행 할 수있는이 문제를 해결하기 위해 폐쇄 때까지 잠금이 해제되지 않았습니다? 어떤 암시 적 streamwriter 또는 filewriter 또는 무언가가 만들어지고 있습니까?

tep

+0

검색을 다시 한 후에 내가 관련 Stackoverflow 질문을 발견 : http://stackoverflow.com/questions/802541/creating-an-empty-file-in-c –

답변

0

예, StreamWriter가 만들어집니다. the docs을 참조하십시오. 첫 번째 프로그램을 작성하여 파일을 작성하는 것이 좋습니다.

7

예. CreateText()은 지정한 파일에 열려있는 StreamWriter 개체를 반환합니다.

반환 값을 무시한 경우 파일에 붙어있는 StreamWriter이 멈 춥니 다. 두 번째 코드 블록과 같이 처리해야합니다.

+0

오,이 사람은 우리를 성가신 오랫동안 버그. 우리가 뮤텍스를 사용하고 있었고 StreamWriter를 폐기하지 않았기 때문에 예외가 없는지 확인했습니다 ... – MattGWagner

0

가장 간단한 해결책은 작성 및 닫기를 수행하는 래퍼 기능을 만드는 것입니다.

Module Tools 
    Sub CreateTextNoLock(ByVal text as String) 
    Dim sw = File.CreateText(text) 
    sw.Close 
    End Sub 
End Module 
2

CreateText() 파일을 만든 다음 필요한 경우 StreamWriter 그래서 당신이 파일에 쓰기를 유지할 수 있습니다 반환합니다.

파일을 닫으려면 명시 적으로 파일을 닫아야합니다 (예에서와 같이). 당신이 스트림없이 빈 파일이 필요하면

1

,이 시도 : 생성되는 몇 가지 암시에서는 StreamWriter 또는 filewriter 또는 뭔가

File.WriteAllBytes(path, new byte[0]); 
5

있습니까?

StreamWriter가 자신의 코드에서 보여준 것처럼 만들어집니다. 그래서 StreamWriter 유형의 변수에 반환 값을 할당 할 수 있습니다.

File.CreateText(path).Close() 

편집 :

테스트 및 확인이 작동하는

이 내가 빈 파일을 만들 알고있는 간단한 방법입니다.

0

StreamWriter를 닫을 때 범위 지정하려면 StreamWriter를 using 블록으로 묶어야합니다. 이것은 그것의 처분 (그것을 닫는) 호출하고 그것을 참조로 연결을 끊고 GC로 "보내"합니다.

Using sw As StreamWriter = File.CreateText(path) 
    sw.Write("") 
End Using 
1

File.CreateFile는 StreamWriter를 통해 FileMode.Create, FileAccess.Write 및 FileShare.Read를 통과하여 FILESTREAM 생성자를 호출 끝난다. 이는 파일을 만들고 액세스하고 공유하는 매우 일반적인 방법입니다. 방금 파일을 만들었으므로 확실히 쓰기 액세스가 필요합니다.그리고 다른 프로세스가 파일을 쓰는 동안 파일을 읽는 것이 좋습니다. 아무리 나쁜 일도 일어나지 않습니다.

당신이 원하는 것은 가능하지만 File.CreateFile()을 사용할 수 없습니다. 먼저 FileStream (Create, Write 및 FileShared.ReadWrite)을 만들어 StreamWriter 생성자에 전달해야합니다. 이제 파일은 당신과 다른 프로세스 모두에 의해 쓰여질 수 있습니다.

당신과 다른 프로세스가 동시에 파일에 쓰기를한다고 가정하면 다소 까다 롭습니다. 이것은 선착순입니다. 파일은 프로그램 결과물을 포함하고, 다른 프로세스의 결과와 무작위로 섞여 있습니다. 그 일이 일어난 후에도 파일을 읽을 수있을 것 같지 않습니다.

어쩌면 당신은 의도적으로 파일에 직접 쓰지 않으려 고합니다. 매우 드문 일이지만 일할 수 있습니다. 더 큰 문제는 다른 프로세스가 파일이 있음을 감지하는 것입니다. 파일을 생성하기 위해 다른 프로세스로 남겨두면 모든 것이 더 잘 작동 할 것입니다.