2016-07-28 5 views
1

wie eine Zip-Datei nach dem Kopieren in einen anderen Ordner zu löschen ... Ich bekomme eine Ausnahme beim Löschen .. Es heißt, dass "die Datei von einem anderen Prozess verwendet wird".Wie lösche Zip-Datei nach dem Kopieren in einen anderen Ordner

string pathString1 = FullFilePath; 
string sourceFileName = Path.GetFileName(pathString1); 
string foldername = Path.GetDirectoryName(pathString1); 
string pathString = Path.Combine(foldername, "Uploaded"); 
if (!System.IO.Directory.Exists(pathString)) 
{ 
    System.IO.Directory.CreateDirectory(pathString); 
    string destFile = System.IO.Path.Combine(pathString, sourceFileName); 
    File.Copy(pathString1, destFile); 

    File.Delete(pathString1); 
    File.Delete(FileName); 
} 
+1

Geben Sie den Code, den Sie verwenden beenden zu arbeiten mit den Dateien. –

+0

Zeigen Sie den Code an, mit dem Sie versucht haben, Hilfe zu erhalten. –

+0

Sie müssen den Stream schließen, den Sie verwenden, um die Datei zu lesen. Sobald wir Ihren Code sehen können, können wir Ihnen helfen. –

Antwort

2

Wenn Sie die Zip-Datei entpacken, tut dies dann in einem mit Block oder .Dispose() das Objekt, das zum Dekomprimieren verantwortlich ist. Welche lib verwendest du?

2

Um die Verriegelung von Dateien zu verhindern, die using Anweisung, um die Datei freigeben, wenn es mit dem Betrieb getan:

using (FileStream stream = File.Open("path to file", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    ... 
} 

Dann wieder, wenn Sie die Datei löschen haben Recht, nachdem Sie es kopieren, dann warum verschiebe es nicht einfach?

File.Move(from, to); 
+0

aber auch die gleiche Ausnahme .. konnte nicht zugreifen, weil die Datei wird von einem anderen Prozess verwendet .. – Pinky

0

da diese Theorie ist, dass ein Virus-Checker in die ZIP-Datei geht, können Sie erneut versuchen warten, dass es mit Wiederholungen

string pathString1 = FullFilePath; 
string sourceFileName = Path.GetFileName(pathString1); 
string foldername = Path.GetDirectoryName(pathString1); 
string pathString = Path.Combine(foldername, "Uploaded"); 
if (!System.IO.Directory.Exists(pathString)) 
{ 
    System.IO.Directory.CreateDirectory(pathString); 
    string destFile = System.IO.Path.Combine(pathString, sourceFileName); 
    File.Copy(pathString1, destFile); 

    int itries = 0; 
    int maxtries = 30; //suitable time of retrying 
    while (itries++ < maxtries) 
    { 
     try 
     { 
      File.Delete(pathString1); 
      itries = 999999; 
     } 
     catch (Exception ex) 
     { 
      if (itries > maxtries) throw ex; 
      Thread.Sleep(1000); 
     }  

    } 

    //File.Delete(FileName); 
} 
Verwandte Themen