2012-02-08 3 views
17

나는 항상 대답은 '예'라고 가정했지만 지금은 진실을 찾으려고합니다.Path.GetTempFileName으로 만든 파일이 자동으로 정리됩니까?

Path.GetTempFileName()을 사용하여 임시 파일을 만들면 Windows에서 나중에 자동으로 정리할 예정입니까?

Path.GetTempPath() 아래에 디렉토리를 만들면 어떨까요? 창문을 청소합니까?

또는 거기에서 생성 된 파일을 삭제하는 것은 개발자의 책임입니까?

답변

10

아니요 자동으로 삭제되지 않습니다. 닫을 때 자동으로 삭제되는 파일을 만들려면 FILE_FLAG_DELETE_ON_CLOSECreateFile으로 전달하십시오.

파일은 지정된 핸들과 다른 열려 있거나 복제 된 핸들을 포함하여 모든 핸들이 닫힌 후 즉시 삭제됩니다. 파일에 대한 열린 핸들이있는 경우 FILE_SHARE_DELETE 공유 모드로 열리지 않으면 호출이 실패합니다. FILE_SHARE_DELETE 공유 모드가 지정되어 있지 않으면 파일에 대한 후속 열기 요청이 실패합니다.

.net에서이 Win32 기능에 액세스하려면 SafeFileHandle 클래스를 사용하십시오.

+1

'FILE_ATTRIBUTE_TEMPORARY'는 파일을 자동으로 삭제하지 않습니다. 이 플래그는 OS에 가능한 한 많은 파일을 메모리에 저장하려고 시도하고 실제로 물리적 인 매체를 사용하지 못하도록 암시합니다. 원하는 플래그는'FILE_FLAG_DELETE_ON_CLOSE'입니다. –

+0

@ JesseC.Slicer 네 말이 맞아, 내 마음에 두뇌 동결. 나는 지금 고쳤다. 감사. –

+0

문제 없습니다. +1 정보. –

4

내 Windows Forms & WPF 응용 프로그램의 경우 응용 프로그램이 닫힐 때 파일을 삭제하는 이벤트가 추가되었습니다. 좋아요 :

private string GetTempFile() { 
    string tmpfile = Path.GetTempFileName(); 
    this.Closed += (object sender, EventArgs e) => { 
     if (File.Exists(tmpfile)) 
      File.Delete(tmpfile); 
    }; 
    return tmpfile; 
} 
1

이 방법은 저에게 효과적입니다. 오프닝 프로그램이 닫힐 때를 추적 한 다음 파일을 삭제하려고 시도합니다.

//Open it now and cleanup when program closes 
Process p = Process.Start(path); 
p.EnableRaisingEvents = true; 
p.Exited += (sender, e) => 
{ 
    try 
    { 
     File.Delete(path); 
    } 
    catch { } //Suppress errors 
}; 
1

질문에 대한 대답은, 당신은 아마 당신이 tmpFFFF.tmp에 도달 할 때까지 알 수 없으며 오류가 않을 것이다. 이것이 웹 서버에 있다면 작업이 실패 할 것입니다.

임시 파일에 사용되는 경로 이름은 컨텍스트에 따라 다릅니다. 따라서이 오류가 발생하고 응급 상황 인 경우 정확한 tmp 폴더를 빨리 찾을 수 있는지 확인하고 싶을 것입니다.

C:\Users\sweaver\AppData\Local\Temp\2\tmp4193.tmp 

그리고 AppPool을위한 Load User Profile = True와 IIS에서

내가 얻을 :

C:\Users\APPPOOL_NAME\AppData\Local\Temp

그리고 윈도우 8에서 콘솔 응용 프로그램으로 실행

나에게 내 로컬 prpofile의 경로를 제공 Load User Profile = False 더 관리하기 편합니다.

C:\Windows\TEMP\tmp7C32.tmp 

임시 파일을 지우려면이 파일을 즉시 지우고 싶습니다!

+0

tmp 파일을 만든 후 즉시 삭제하십시오. 때로는 바이러스 방지 소프트웨어가 들어가서 검사를 시도한 다음 삭제하지 못하게 할 수 있습니다. –

관련 문제