2012-01-25 5 views
3

C#으로 ASP.NET Webforms를 사용하고 있습니다. 한 페이지에서 제출을 클릭하여 서버에 파일을 만듭니다.프로세스가 다른 프로세스에서 사용 중이므로 프로세스가 파일에 액세스 할 수 없습니다.

File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) 
      + landingPage.FriendlyName); 

이 제대로 작동하고 예상대로 파일을 만듭니다. 그러나 이렇게하면 방금 작성된 파일을 읽는 다른 페이지로 리디렉션됩니다.

var landingPageContent 
     = File.ReadAllText(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) 
          + landingPage.FriendlyName); 

이 오류가 발생했습니다.

프로세스가 파일을 액세스 할 수 없습니다 'C : \ 코드 \ 내용 \ CMS \ LandingPages \ Test2를'을 다른 프로세스에서 사용하고 있기 때문이다.

IIS를 다시 시작하면 프로세스에서 파일을 해제하고 해당 페이지를로드하고 파일을 읽을 수 있습니다. 리디렉션 전에 파일을 닫으려면 File.Create 이후에해야 할 일이 있습니까?

답변

8

File.Create이 반환 한 스트림을 닫았습니까? 이름은 다소 혼란 스럽지만 (WinAPI의 줄기에서 온 것입니다), 파일을 작성하면 이 작성되어 작성됩니다.

+0

아, 나는 스트림을 반환했는지조차 몰랐습니다. 감사합니다! 내가 수락 할 때 받아 들일 것입니다. – Chev

6

File.Create이 Filstream를 반환,이 시도 :

using (FileStream fs = System.IO.File.Create(...)){} 

이하를 :

File.Create(...).Dispose(); 
+0

이것은 잘 작동합니다. Matti의 답변 후에 나는'File.Create (.....). Dispose(); '를하는 것이 더 쉬운 것을 알았다. 고마워. – Chev

3

교체하려고 :

File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) + landingPage.FriendlyName); 

로 :

using(File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) + landingPage.FriendlyName)) 
{} 
3

을 발표때문에 파일 핸들이 immedately 배치

/그냥 닫습니다

var fileStream = File.Create(...); 
fileStream.Close(); 

만든 파일 일을하고있다가 마지막으로 핸들을 닫을 것 using 블록이 논리 나은 포장 될 경우 :

관련 문제