Laden...

System.IO.IOException

Erstellt von Massaka vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.366 Views
M
Massaka Themenstarter:in
67 Beiträge seit 2004
vor 19 Jahren
System.IO.IOException

Nochmal ein Hallo 🙂

Ich bastel gerade an einem Tool mit dem man Bilder auf einen FTP Server hochladen kann. Bis zu einem gewissen Punkt läuft es auch recht stabil. Nur aus einem mir nicht bekanntem Grund bekomme ich dann irgendwann folgende Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 'System.IO.IOException' ist in mscorlib.dll aufgetreten.

Zusätzliche Informationen: Der Prozess kann nicht auf die Datei "C:\Dokumente und Einstellungen\user\Eigene Dateien\Eigene Bilder\blub.jpg" zugreifen, da sie von einem anderen Prozess verwendet wird.

Ich kann diesen Fehler leider nicht wiederholen weil ich ja nicht weiss was ihn auslöst.
Bilder werden über OpenFileDialog in Thumbs gewandelt, in PictureBoxen gepackt und einer Listview hinzugefügt. Nach fertigem Upload leere ich die Listview. Ich denke hier ist irgendwo das Problem.

Code:


myFileNames_dyn = new ArrayList();
				foreach(string pfad in myDialog.FileNames)
					myFileNames_dyn.Add(pfad);

				myFileNames_dyn.TrimToSize();
				myFileNames = new string[myFileNames_dyn.Count];
				myDialog.FileNames.CopyTo(myFileNames, 0);
				int anzahl = myFileNames_dyn.Count;
				imageArray = new Image[anzahl];
				Image[] imageArray_thumb = new Image[anzahl];
				if (myFileNames.Length != 0)
				{
					for(i = 0; i < anzahl; i++)
					{
System.Drawing.Image MyImage = Image.FromFile((string)myFileNames_dyn[i]);
imageArray[i] = MyImage;
bildnamen = myFileNames[i].Split(trenner[0]);
picsToUpload.Items.Insert(i, bildnamen[bildnamen.Length-1]); //<--Der Listview eintrag
myBildnamen.Add(bildnamen[bildnamen.Length-1]);
Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
imageArray_thumb[i] = MyImage.GetThumbnailImage(70, 70, myCallback, System.IntPtr.Zero);
					}
					myBildnamen.TrimToSize();
					this.Invalidate();
				}

Nachdem Upload leere ich wie folgt:


this.picsToUpload.Items.Clear();

Der Debugger gibt mir an das der Fehler in meiner FTP Klasse passiert


FileStream input = new FileStream(fileName,FileMode.Open);

Das muss ja dann wohl der fileName sein, denke ich.

Selbst nach einem Reboot ist der Fehler noch vorhanden. Ich bin völlig Ratlos und habe keine Ahnung woran es liegen könnte.

Vieleicht hat ja jemand von euch einen Tip.

Danke schonmal im Voraus!

Reden führt zu unklaren, undeutlichen Dingen. 'George W. Bush'

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo Massaka,

hier scheint der Fehler genau das zu sein, was die Fehlermeldung sagt,

er Prozess kann nicht auf die Datei "C:\Dokumente und Einstellungen\user\Eigene Dateien\Eigene Bilder\blub.jpg" zugreifen, da sie von einem anderen Prozess verwendet wird.

wobei die Betonung auf 'von einem anderen Prozess verwendet' liegt. Ich denke die Datei war von einem anderen Programm (zum Schreiben) geöffnet. Wenn Du das Programm mittlerweile geschlossen hast, tritt der Fehler natürlich nicht mehr auf. Ich denke alles was man das tun kann, ist die Exception abzufangen und eine nettere Fehlermeldung auszugeben.

HTH

herbivore

D
279 Beiträge seit 2004
vor 19 Jahren

Hallo,

ich denke es liegt daran, dass du die Resource (in dem Fall die Datei) vorher nicht wieder freigibst, obwohl du sie verwendest hast. Beispielsweise als Image Objekt.

Ruf doch dann mal folgendes auf:


MyImage.Dispose();

Am besten jedoch verwendest du using-Blöcke. Dann werden die Ressourcen automatisch freigegeben (sofern IDisposable implementiert ist):


using(Image img = Image.FromFile(filename))
{
	//..
}

using( FileStream fs = new FileStream(filename,FileMode.Open))
{
	//..
}

M
Massaka Themenstarter:in
67 Beiträge seit 2004
vor 19 Jahren

JAA!

Das war es, mit der Dispose Methode funzt es jetzt Prima.

Vielen Dank ! 🙂

Reden führt zu unklaren, undeutlichen Dingen. 'George W. Bush'