System.IO.IOException: Der Prozess kann nicht auf die Datei 'Dateiname'

Ich habe eine Methode in meinem windows-Dienst wie folgt:

System.IO.File.Copy(path, ConfigurationManager.AppSettings["BulkInsertGiftRegisterCreatorDirectory"] + System.IO.Path.GetFileName(path));

Loyalty.Entity.Base.FileInfo file = new Loyalty.Entity.Base.FileInfo();
file.FileName = path;
request.Object = file;

ResponseBase response = new ResponseBase(request);
RequestConnection connection = new RequestConnection("cn");
FileManager fileManager = new FileManager(request, connection);
response = fileManager.OfflineGiftRegisterBulkInsert();

System.IO.File.Delete(ConfigurationManager.AppSettings["BulkInsertGiftRegisterCreatorDirectory"] + System.IO.Path.GetFileName(path));

//here is the part of stored procedure that uses file
SELECT @SCRIPT= 'BULK INSERT GIFT_CARD.GIFT_TEMP'
                            +' FROM '''
                            + @FILE_PATH
                            +''' WITH ('
                                 +'FIELDTERMINATOR = '','','
                                 + 'KEEPNULLS'
                            +');'

Kann ich die Datei löschen aus dem Datei-system von hand, aber dieser code sagt mir "Ooops! System.IO.IOException: Der Prozess kann nicht auf die Datei 'Dateiname'
denn es wird von einem anderen Prozess verwendet."

Habe ich gesucht, die ähnliche Fragen auf stackoverflow und sonst wo. Aber ich konnte nichts finden, um mir zu helfen. Kopieren oder Löschen von Methoden, die "void" zurückgeben und ich habe keinen Strom in meinem code zu entsorgen.

Wie kann ich es beheben?

Vielen Dank im Voraus.

  • Was ist das "etwas anderes tun" - Teil zu tun? Ich nehme an, es ist etwas mit der Datei nicht kopiert/gelöscht werden. Und ich habe das Gefühl, dass dies etwas ist hier wichtig.
  • Sieht Ihr Fenster service laufen unter der gleichen Identität wie Sie? Wenn nicht, vielleicht das Fenster service der keine Berechtigung zum löschen der Datei.
  • Ich rufe eine gespeicherte Prozedur verwendet den Pfad der Datei an, die bulk insert-Zeilen enthalten, die von der Datei.
  • Das bedeutet, dass die Datei geöffnet ist (wahrscheinlich durch die Methode der Ausführung der gespeicherten Prozedur oder die gespeicherte Prozedur). Stellen Sie sicher, es ist richtig geschlossen. Wenn Sie Ihre code-wir können Ihnen helfen, das problem zu finden.
  • Ich bin das anmelden mit dem gleichen Benutzer, den windows-Dienst verwendet wird.
  • Hinzugefügt habe ich den Dienst Anruf-Linien
  • Stellen Sie sicher, dass der Antrag, der Verbindung und der fileManager Objekte ordnungsgemäß entsorgt werden, wenn Sie implementieren IDisposable. So können Sie am besten durch wickeln Sie Ihren code in using Blöcke.
  • Wie werden Sie die Auslösung der Methode? FileWatcher? timer?
  • Und was ist, wenn Sie nicht implementieren IDisposable?
  • Frix-timer
  • So, das war meine Antwort hilfreich oder nicht?

InformationsquelleAutor anilca | 2010-11-08
Schreibe einen Kommentar