Heparus Geschrieben 1. September 2008 Geschrieben 1. September 2008 (bearbeitet) Hallo zusammen, ich hab ein kleines Problem. Ich erstelle eine neue Datei und will diese mit einem Filestream füllen. Dabei kommt es zu einer IOException:"Der Prozess kann nicht auf die Datei C:\DWS\testfolder\ersterbuchstabekundenname\Kundenname_Kundennummer\Mitarbeitername\irgendwas.doc zugreifen, da sie von einem anderen Prozess verwendet wird." Die betreffenden Codezeilen sehen wie folgt aus: fs = new FileStream(delim + dir[ii], FileMode.Open); byte[] inhalt = new byte[(int)fs.Length]; fs.Read(inhalt, 0, (int)fs.Length); string myfile = null; if (!blob_Bezeichner.Equals("")) { myfile = checkurl + blob_Bezeichner + file_end[ii]; } else { myfile = checkurl + dir[ii]; } File.Create(myfile); [COLOR="Red"]FileStream fstream = new FileStream(myfile, FileMode.Create);[/COLOR] fstream.Write(inhalt, 0, (int)fs.Length); fstream.Close(); fs.Close(); //Console.WriteLine("Kopiere "+ myfile + " nach "+ checkurl); Add_Doc2WSS(myfile, 0, "", PERS_ID, "", "", cuser); myfile = null; In der rot markierten Zeile tritt der Fehler auf. Die ersten 5 oder 6 Dateien bereiten mir keine Probleme, aber dann beginnt der Spass. Zur Info: Das Programm soll ca. 40.000 Ole-Objekte aus einer Access-DB extrahieren, die Dateien verschieben, umbenennen und anschließend in einen Sharepoint-Server hochladen. Deswegen erstelle ich die Ordner und Dateinamen aus mehreren Datenbankabfragen. Aber zurück zum eigentlichen Thema. Ich hab jetzt schon die Prozessüberwachung von sysinternels mitlaufen um zu sehen, welcher Prozeß mir in die Quere kommt. Aber ich kann damit nur mein eigenes Programm sehen. Kann es sein, dass das erstellen der Datei noch nicht abgeschlossen ist, wenn mein Filestream loslegt? Ich stehe zur Zeit nämlich auf dem Schlauch, was da schief läuft. Über schnelle Hilfe würde ich mich freuen und bedanke mich schonmal im Voraus. Bearbeitet 1. September 2008 von Heparus Designfehler Zitieren
Guybrush Threepwood Geschrieben 1. September 2008 Geschrieben 1. September 2008 File.Create(myfile); FileStream fstream = new FileStream(myfile, FileMode.Create); [/PHP] Wieso willst du die Datei 2 mal erstellen? Zitieren
Heparus Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 Hallo hab das Problem gefunden, man darf halt kein Wochenende durcharbeiten und am Ende nur noch Copy&Paste machen, um schnell die If-Zweige der Anwendung zu füllen. Der Fehler war : File.Create(myfile); FileStream fstream = new FileStream(myfile, FileMode.Create); Eine vorhandene Datei nochmal Createn ist ne dumme Idee, ich hab jetzt das File.Create(myfile) gelöscht nun läuft es. der Thread kann geschlossen weden. Zitieren
Heparus Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 @Guybrush Threepwood: THX für die Hilfe, ich war da echt blind. Das Create File war noch ein Überrest aus einer alten Idee. Und hab es einfach übersehen. Bzw es war auskommentiert und ich hab es ausversehen beim letzten Build wieder in den Code reingenommen. Zitieren
Guybrush Threepwood Geschrieben 1. September 2008 Geschrieben 1. September 2008 Wobei ich die Fehlermeldung dazu ein wenig merkwürdig finde Zitieren
TDM Geschrieben 1. September 2008 Geschrieben 1. September 2008 Wobei ich die Fehlermeldung dazu ein wenig merkwürdig finde Wieso? Datei wird erzeugt; Stream ist noch offen; Datei wird nochmal erzeugt; Stream wird geschlossen. Klar, dass es da blockiert ist. Mich wunderts nur, dass die ersten 5-6 Dateien keinen Fehler bringen. Zitieren
Heparus Geschrieben 1. September 2008 Autor Geschrieben 1. September 2008 (bearbeitet) Eigentlich ist sie nicht merkwürdig, sonder logisch, ich hab versucht ein und dasselbe Objekt 2x mal zuerzeugen. Dafür werden verschieden Mechanismen gestartet und Windows bzw. VS2008 sieht nur 2 verschiedene Zugriffe, die zwar aus dem selben Programm kommen, aber im Taskmanager wie 2 verschiedene Prozesse behandelt werden. Das OS prüft ja nicht, ob die Datei schon vorhanden ist sondern stellt nur eine Zugriffsverletzung fest. Und das kann auch beim Kopieren, Löschen, Editieren auftreten. @TDM: Das hat was mit den ganzen If-Bedingungen zu tun die da noch stehen, die du aber nicht siehst. In den anderen Fällen gab es das File.Create nicht. Wie gesagt erzeuge ich den Datei und Ordnernamen aus Tabellen-Abfragen einer Datenbank, die wie ich sagen muss nicht gerade gut gepflegt ist. Deswegen muss ich relativ viele Fehler abfangen, weil die Felder Null sein können, aber auch z.B. Asiatische Schriftzeichen beinhalten. Es kann soweit gehen, daß Kunden und Mitarbeiter nur aus Kundennummer und Mitarbeiternummer bestehen. Aber nach 2 Wochen durcharbeiten und ungefähr 100 Überstunden mehr auf der Uhr, kann man so ne kleine Stelle schonmal übersehen. Bearbeitet 1. September 2008 von Heparus Zitieren
Guybrush Threepwood Geschrieben 1. September 2008 Geschrieben 1. September 2008 Eine logische Fehlermeldung wäre etwas in der Art "Datei xy kann nicht erstellt werden weil sie schon vorhanden ist", denn damit hättest du den Fehler auch direkt finden können, die obige ist ziemlich nutzlos, aber naja... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.