2017-05-23 3 views
0

Wenn Asset-Dateien für Minecraft zum Download versuchen, die Hälfte der Dateien nicht mit einem Download-Fehler: "An exception occurred during a WebClient request."C# WebClient IOException in DownloadCallback

Mit dem Innerexception Wesen: "{"The process cannot access the file 'C:\\Users\\[redacted]\\AppData\\Roaming\\[redacted]\\Minecraft 1.10\\assets\\objects\\bdbdf48ef6b5d0d23bbb02e17d04865216179f510a' because it is being used by another process."}".

Ich verwende das Ereignis FileDownloadCompleted.

Ich habe auch versucht, ein "." bis zum Ende jeder Datei, die keine richtige Erweiterung hat, aber das Problem wurde nicht gelöst.

Auch dieses Problem ist nicht konsistent. Einige Dateien mit ähnlichen Namen werden normalerweise heruntergeladen, während andere Dateien nicht heruntergeladen werden können. Es ist jedoch auch kein Internet-Problem, und ich habe auf mehreren Computern getestet.

Wie kann ich diese Ausnahme beheben?

+0

Hallo, könnte es whitespace vielleicht in den Dateinamen sein? Sie könnten versuchen, es zu entfernen, wenn dies der Fall ist. d. h. 'someString.Replace (" ", string.Empty);' –

+1

Diese Nachricht ist üblich für "ein anderes Programm hat eine Sperre dafür". –

+0

@John Peters, ich verstehe, was der Fehler bedeutet, aber das ist eine Datei, die von Grund auf neu heruntergeladen wird, keine anderen Programme überhaupt über diese Datei wissen. – Unknown025

Antwort

0

Als Provisorium habe ich eine while-Schleife hinzugefügt, um auf die Verfügbarkeit der Datei zu warten.

else if(e.Error.InnerException is IOException) 
        { 
         bool canAccess = false; 
         while (!canAccess) 
         { 
          try 
          { 
           File.Move(Userstate[0], Userstate[0]); 
           canAccess = true; 
           Debug.Print("Can now access file: " + Userstate[0]); 
          } 
          catch(IOException) { } 
         } 
        } 

Dieser Code ist Teil der DownloadCallback Handler und überprüft den Status von e.Error.InnerException. Das scheint nicht die beste Lösung zu sein, aber es ist die einzige, die mir einfällt.