Hi,
ich habe folgendes Problem.
Über eine ASP.NET Webseite wird eine Datei hochgeladen. Auf einer anderen Unterseite, etwas später, muss diese Datei umbenannt werden ... an den Dateinamen muss ich einfach noch was dran hängen. Ich versuche die Datei folgendermaßen umzubenennen:
FileInfo FI = new FileInfo(absolutePath);
string oldName = FI.Name;
string newName = string.Format("Auftr{0}_{1}", auftrNr, oldName);
string destPath = absolutePath.Replace(oldName, newName);
FI.MoveTo(destPath);
Ich teste das Ganze über den lokalen Testserver, also nicht online. Komischerweise bekomme ich meistens eine Fehlermeldung: "Der Prozess kann nicht auf die Datei zugreifen, da sie bereits von einem anderen Prozess verwendet wird." und zwischendurch funktionierts dann wieder mal. Auf die Datei greifen aber keine weiteren Programme zu, also ich verwende Sie nicht irgendwo bewusst.
Was könnte die Datei noch blockieren und warum nicht immer?
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
Setze das FileInfo in eine using-Klausel, vlt hält er die im Speicher.
Real programmers don't comment.
If it was hard to write, it should be hard to understand!
Nein das FileInfo ist nicht das Problem, es kommt erst zu der Meldung wenn die Datei wirklich von einem Prozess geöffnet wurde. Schau dir mal das Programm Unlocker an, es zeigt dir, welches Programm welche Datei noch offen hat und bei Bedarf die Datei auch freigeben.
Vermutung wäre hier, das der IIS die Datei noch offen hält.
Kannst du die Datei lesend öffnen?
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Der Unlocker meldet sich nicht. Lesend kann ich die Files öffnen.
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
Bin zwar (noch) nicht 100% sicher, aber lag evtl. an den FileAttributes, also Schreibschutz. Ich setze mal standardmäßig die Attributes auf "normal" vor dem Umbenennen und bisher gehts auch scheinbar.
Edit: Doch nicht 🙁
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
Scheinbar könnte es wirklich daran liegen, dass der IIS die Bilder belegt. Ich hab das hier gefunden, wo ein ähnliches Problem besprochen wird, allerdings liegt es hier scheinbar daran, dass das Bild vorher geöffnet wurde und der IIS sich deshalb druaf setzt, das mache ich allerdings nicht, ich öffne die Files ausschließlich über eine aspx-Seite.
http://www.mail-archive.com/asp.net@glengamoi.com/msg14850.html
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================
[PROBLEM GELÖST]
Es war wirklich der IIS. Es war im Prinzip genau das Problem, welches auf der Seite (Link) angesprochen wird. Allerdings wurde es bei mir nicht dadurch ausgelöst, dass das Bild direkt im Browser geladen wurde, sondern dadurch, dass es in der Anzeigedatei geöffnet und nicht wieder freigegeben wurde. Ich habe die Datei jetzt noch mal nachgeschaut und explizit alle möglichen Kanddaten, die auf die Datei zugreifen mit Dispose() zur Löschung freigegeben und siehe da, jetzt klappts.
==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================