나는 항상 대답은 '예'라고 가정했지만 지금은 진실을 찾으려고합니다.Path.GetTempFileName으로 만든 파일이 자동으로 정리됩니까?
Path.GetTempFileName()
을 사용하여 임시 파일을 만들면 Windows에서 나중에 자동으로 정리할 예정입니까?
Path.GetTempPath()
아래에 디렉토리를 만들면 어떨까요? 창문을 청소합니까?
또는 거기에서 생성 된 파일을 삭제하는 것은 개발자의 책임입니까?
나는 항상 대답은 '예'라고 가정했지만 지금은 진실을 찾으려고합니다.Path.GetTempFileName으로 만든 파일이 자동으로 정리됩니까?
Path.GetTempFileName()
을 사용하여 임시 파일을 만들면 Windows에서 나중에 자동으로 정리할 예정입니까?
Path.GetTempPath()
아래에 디렉토리를 만들면 어떨까요? 창문을 청소합니까?
또는 거기에서 생성 된 파일을 삭제하는 것은 개발자의 책임입니까?
아니요. 따라서 http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx은 "고유 한 임시 파일 이름이 없으면 GetTempFileName 메서드가 IOException을 발생시킵니다.이 오류를 해결하려면 불필요한 임시 파일을 모두 삭제하십시오."
아니요 자동으로 삭제되지 않습니다. 닫을 때 자동으로 삭제되는 파일을 만들려면 FILE_FLAG_DELETE_ON_CLOSE
을 CreateFile
으로 전달하십시오.
파일은 지정된 핸들과 다른 열려 있거나 복제 된 핸들을 포함하여 모든 핸들이 닫힌 후 즉시 삭제됩니다. 파일에 대한 열린 핸들이있는 경우 FILE_SHARE_DELETE 공유 모드로 열리지 않으면 호출이 실패합니다. FILE_SHARE_DELETE 공유 모드가 지정되어 있지 않으면 파일에 대한 후속 열기 요청이 실패합니다.
.net에서이 Win32 기능에 액세스하려면 SafeFileHandle
클래스를 사용하십시오.
내 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;
}
이 방법은 저에게 효과적입니다. 오프닝 프로그램이 닫힐 때를 추적 한 다음 파일을 삭제하려고 시도합니다.
//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
};
질문에 대한 대답은, 당신은 아마 당신이 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
임시 파일을 지우려면이 파일을 즉시 지우고 싶습니다!
tmp 파일을 만든 후 즉시 삭제하십시오. 때로는 바이러스 방지 소프트웨어가 들어가서 검사를 시도한 다음 삭제하지 못하게 할 수 있습니다. –
'FILE_ATTRIBUTE_TEMPORARY'는 파일을 자동으로 삭제하지 않습니다. 이 플래그는 OS에 가능한 한 많은 파일을 메모리에 저장하려고 시도하고 실제로 물리적 인 매체를 사용하지 못하도록 암시합니다. 원하는 플래그는'FILE_FLAG_DELETE_ON_CLOSE'입니다. –
@ JesseC.Slicer 네 말이 맞아, 내 마음에 두뇌 동결. 나는 지금 고쳤다. 감사. –
문제 없습니다. +1 정보. –