2012-02-08 15 views

Odpowiedz

10

Nie są usuwane automatycznie. Aby utworzyć plik, który zostanie automatycznie usunięty po zamknięciu, należy przekazać FILE_FLAG_DELETE_ON_CLOSE do CreateFile.

Plik należy usunąć natychmiast po zamknięciu wszystkich jego uchwytów, który obejmuje określony uchwyt i inne otwarte lub zduplikowane uchwyty. Jeśli istnieją otwarte uchwyty do pliku, połączenie nie powiedzie się, chyba że wszystkie zostały otwarte przy użyciu trybu udostępniania FILE_SHARE_DELETE. Kolejne otwarte żądania dotyczące pliku kończą się niepowodzeniem, chyba że określono tryb udostępniania w trybie udostępniania FILE_SHARE_DELETE. Aby uzyskać dostęp do tej funkcji Win32 z domeny .net, należy użyć klasy .

+1

'FILE_ATTRIBUTE_TEMPORARY' nie usunie pliku automatycznie. Ta flaga wskazuje systemowi operacyjnemu tylko na próbę buforowania pliku w pamięci w jak największym stopniu i ewentualnie rezygnację z fizycznego medium. Flaga, której szukasz, to "FILE_FLAG_DELETE_ON_CLOSE". –

+0

@ JesseC.Slicer Masz rację, zamrożenie mózgu z mojej strony. Poprawiłem. Dzięki. –

+0

Nie ma problemu, proszę pana! +1 dla informacji. –

4

Dla aplikacji Windows Forms & dodałem zdarzenie, aby usunąć plik po zamknięciu aplikacji. W ten sposób:

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

Ta metoda działa dobrze dla mnie. Śledź, gdy program otwierający się zamyka, a następnie spróbuj usunąć plik.

//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

Odpowiedź na to pytanie nie jest i nigdy nie będziesz zapewne zauważy, aż dojdziesz tmpFFFF.tmp i pojawia się błąd. Jeśli znajduje się na serwerze internetowym, twoja operacja zakończy się niepowodzeniem.

Ścieżka do plików tymczasowych zależy od kontekstu. Jeśli otrzymujesz ten błąd i jest to stan awaryjny, upewnij się, że możesz szybko znaleźć prawidłowy folder tmp.

Running jako app konsoli na Windows 8 daje mi ścieżkę w moim lokalnym prpofile:

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

A w IIS z Load User Profile = True dla AppPool uzyskać:

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

i kiedy Load User Profile = False Dostaję łatwiejsze w zarządzaniu:

C:\Windows\TEMP\tmp7C32.tmp 

Chcesz od razu wyczyścić pliki tymczasowe, aby tego uniknąć!

+0

Uważaj, jeśli utworzysz plik tmp i natychmiast go usuń. Czasami oprogramowanie antywirusowe przeskakuje i spróbuje je zeskanować, a następnie uniemożliwić usunięcie. –

Powiązane problemy