Dateien umbenennen

Dieses Thema im Forum "Programmieren" wurde erstellt von mvp, 22. Februar 2004.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. mvp

    mvp ROM

    Registriert seit:
    22. Februar 2004
    Beiträge:
    3
    Ich habe eine Frage

    Ich programmiere in C (noch) mit gcc (gnu c compiler) und habe eine Frage.

    Ich weiss nicht, wie man Dateien effizient umbenennen kann. Ich weiss, dass es eine Funktion rename gibt, aber da ich den Quelltext dieser Funktion angesehen habe, weiss ich, dass diese Funktion die alte Datei zuerst kopiert und dann die alte Datei löscht; was bei grossen Dateien ziemlich ineffizient ist.

    Weiss jemand, wie man mithilfe irgendeiner io-funktion den Dateinamen direkt ändern kann?
     
  2. it-praktikant

    it-praktikant Megabyte

    Registriert seit:
    5. August 2002
    Beiträge:
    1.176
    Hallo,

    prinzipiell würde ich dir raten, doch an execl zu halten. Das hat folgenden Grund:
    - du kannst dir sicher sein, dass du nicht nur deinen Pointer umbenannt hast
    - deine Lösung berücksichtigt die Schreibrechte des Systems und liefert dir auf jeden Fall sinnvolle Fehlermeldungen
    - Du musst deine Programmstruktur wahrscheinlich nicht ändern, wenn du dein programm von einem auf das nächste System überträgst.

    Ciao it.
     
  3. mvp

    mvp ROM

    Registriert seit:
    22. Februar 2004
    Beiträge:
    3
    Ja, danke für den Hinweis

    Das Problem ist allerdings, dass das umbenennen von Windows auch nicht schneller ist; eher noch langsamer.

    Eigentlich ist das Problem so: Wenn nur wenige Dateien im Verzeichnis sind, arbeitet rename() sehr schnell. Wenn aber allerdings etwa 2000 Dateien im Verzeichnis sind, arbeitet es sehr träge? Ist das systembedingt so oder gibt es eine andere Lösung?
     
  4. it-praktikant

    it-praktikant Megabyte

    Registriert seit:
    5. August 2002
    Beiträge:
    1.176
    Morgen,

    du könntest mithilfe von execl oder ähnliche die systemeigene Umbenennungsfunktion aufrufen.

    Aber Achtung: execl kehrt nicht zurück, also erst mit fork einen neuen Kindsprozess erstellen und auf den waretn.

    Ciao it.
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen