Zum Inhalt springen

C# Filestream löst IOException aus


Empfohlene Beiträge

Geschrieben (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 von Heparus
Designfehler
Geschrieben

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.

Geschrieben

@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.

Geschrieben
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.

Geschrieben (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 von Heparus

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...