1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Dateiünerreste bei renameTo()

  • beat
  • 28. Januar 2008 um 01:28
  • Unerledigt
  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 28. Januar 2008 um 01:28
    • #1

    Hallo

    Ich sitze seit stunden bei einem problem dass mich noch wahnsinnig macht. Ich bennene Datein mittels folgender code zeile um:

    Code
    boolean renamed = oldFile.renameTo(newFile);

    Funktioniert auch alles schön und gut, aber manchmal bleibt ein teil des alten files (oldFile) (immer ein paar KB vom anfang) übrig. Das neue File (newFile) mit neuem dateiname gibt es auch und hat auch den korrekten Inhalt. Nur stört es mich dass auch noch dass alte manchmal noch vorhanden ist. Ich hab jetzt so lange debugged dass ich den Fehler genau auf diese methode abschieben kann. Wie kann das sein. Java Bug?

    Die methode in der besagte zeile aufgerufen wird ist übrigends in einem thread falls das was damit zu tun hat?

    Das witzige ist dass es immer die selben Files betrifft bei denen das Problem auftritt. Renamed ist übrigends immer brav auf true

    mfg

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 28. Januar 2008 um 01:39
    • #2

    jetzt hab ich gerade versucth eines der betroffen files mit einer klasse nur bestehend aus main() mit renameTo() umzubenennen und da funktioniert es...
    :wein: :wein: :wein:

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 28. Januar 2008 um 02:19
    • #3

    ich werd noch wahnsinnig...

    Hier der ganze code der methode falls das vielleicht mehr hilft.

    Code
    public void start(File dir) {
    
    
    		
    
    		File[] files;
    		try {
    
    			songs = finder.getRedundantFiles(dir);
    
    
    			
    
    			if (songs.size() > 0) {
    
    
    				for (int i = 0; i < songs.size(); i++) {
    					song = merger.merge(songs.get(i).getSongs());
    
    
    					badFiles = merger.getBadFiles();
    
    
    
    					if(badFiles != null && badFiles.length > 0)
    					handleBadFiles(song.getAbsolutePath().substring(masterRoot.length()));
    
    					if(Utilities.hasCopyCounter(song.getAbsolutePath())) {
    
    						String oldName = song.getAbsolutePath();
    						String newName = Utilities.removeCopyCounter(song.getAbsolutePath()) + ".mp3";
    						//System.out.println("NEW NAME: " + newName);
    
    
    						File oldFile = new File(oldName);
    						File newFile = new File(newName);
    
    						int copyCounter = 2;
    
    						while(newFile.exists()) {
    
    							newFile = new File(Utilities.addCopyCounter(newFile.getAbsolutePath(), copyCounter));
    							copyCounter++;
    
    						}
    
    						//System.out.println("new name " + newName);
    
    
    
    						oldFile.renameTo(newFile);
    
    
    					}
    
    
    				}
    
    
    			}
    
    
    		} catch (Exception e) {
    			TestGUI.appendTextArea("FEHLER in Vereichnis: " + dir.getAbsolutePath() + "\nError Msg is:\n" + e.getMessage());
    
    
    		}
    
    
    		files = dir.listFiles();
    
    		if (files.length > 0) {
    
    
    			for (int i = 0; i < files.length; i++) {
    
    
    				filesVisited++;
    
    
    				try {
    					if (filesVisited % (totalFileAmount / 100) == 0) {
    						pValue++;
    						filesVisited = 0;
    						TestGUI.progress.setValue(pValue);
    					}
    				} catch (ArithmeticException ae) {
    
    
    				}
    
    
    				if (files[i].isDirectory() && files[i].canRead()
    						&& files[i].exists())
    					start(files[i]);
    
    
    			}
    		}
    
    
    	}
    Alles anzeigen

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 28. Januar 2008 um 09:36
    • #4

    "Benennst" du das wirklich nur um (im gleichen Verzeichnis)? Oder verschiebst du es z.B. auf eine andere Partition?

    Kann es sein, dass du Java herunterfährst oder den Thread irgendwie killst, während das Ding läuft?

    Ist die Platte (fast) voll? Überschreitest du deine Quota?

    Kommt mir zwar alles komisch vor, aber irgendeinen Grund wird's schon haben...

  • blackie
    9
    blackie
    Mitglied
    Reaktionen
    1
    Punkte
    831
    Beiträge
    164
    • 28. Januar 2008 um 12:13
    • #5

    weiß zwar keine Lösung aber als Workaround bietet sich an einfach die Datei nachher mit delete() oder deleteOnExit() löschen wenn eine überbleibt

  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 28. Januar 2008 um 13:20
    • #6

    ja, nur umbenennen, bleib auf der selben partition im selben verzeichnis. Das "kaputte" file wird laut dateieigentschaften immer neu erstellt (erstellt am <aktuelleZeit>, geändert am <aktuelle Zeit>. Beim "guten" file steht erstellt am <XX>, geändert am <aktuelle Zeit>.

    Wenn ich folgendes mache:

    Code
    File checkFile = new File(oldName);
    
    if(checkFile.exists())
    checkFile.delete();

    Ist das File trotzdem da. Also muss es irgendwo anders erstellt werde. Wenn ich die rename Methode jedoch einfach auskommentiere erscheint das verkrüppelte file allerdings nicht. Bin mit meinem latein komplett am ende :frowning_face:

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung