Datei löschen nach kopieren geht nicht

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
JRE 1.4, Windows XP

Ich kopiere eine Datei mit folgendem Code:

Code:
  public static void copyFile(File source, File destination) throws IOException {
    FileChannel inChannel = new FileInputStream(source).getChannel();
    FileChannel outChannel = new FileOutputStream(destination).getChannel();
    try {
        inChannel.transferTo(0, inChannel.size(), outChannel);
    } finally {
      if (inChannel != null)
        try { inChannel.close(); } catch(Exception ignore) { LOG(e, e) }
      if (outChannel != null)
        try { outChannel.close(); } catch(Exception ignore) { LOG(e, e) }
    }
  }

Danach versuche ich die Zieldatei wieder zu löschen mit folgendem Code:
Code:
if (!file.delete())
  throw new IOException("Datei konnte nicht gelöscht werden!");

Die Datei ist vollständig kopiert, kann aber tatsächlich nicht gelöscht werden. Die Channels werden fehlerfrei geschlossen. Habe den Copy auch schon mit Streams realisiert, das brachte den selben Fehler. Auch ein sleep() vor dem Löschen bringt keinen Erfolg.

Kann mir jemand erklären warum es nicht geht bzw. sagen wie es richtig geht?
 
Zusatz: es ist auch kein Explorer-Fenster mit dieser Datei offen und auch ein anderer Prozess hat seine Finger darauf... habe ich mit ProcessExplorer überprüft.
 
Tja, wenn eine anderer Prozess darauf zugreift und die Datei lockt (Betriebssystem abhängig), dann kann die Datei natürlich nicht gelöscht werden.
 
Ich würd mal so ins blaue raten und sagen, das Problem kommt davon, dass du die Channels zumachst!

Nicht aber die Streams. Ich teste das mal eben 😉

Oho, ich lag anscheinend falsch! Bei mir gehts TipTop! Hast du die Datei noch wo offen?
 
Anonymous hat gesagt.:
Die Channels werden fehlerfrei geschlossen.
Sicher?
Code:
try { outChannel.close(); } catch(Exception ignore) { LOG(e, e) }
kommt mir ein wenig seltsam vor. Das kann aber auch nur am Beispiel liegen - passt in deinem Orginal Code das Logging zur Exception?.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben