Anzeige:
Ergebnis 1 bis 10 von 10

Thema: dateien mit leerzeichen im namen kopieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150

    dateien mit leerzeichen im namen kopieren

    wie geht das?

    ich hab z.B. eine Datei namens: "datei mit leerzeichen.txt"

    wie kann ich diese in ein anderes verzeichnis kopieren?
    in einem C proggi natürlich

    vorsict: das ganze muss dynamisch sein, es darf also nicht auf einen besteimmten dateinamen bestimmer länge begrenzt sein!
    Grüße,
    mithras

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    ich versteh nicht ganz wo dein problem ist.
    bei der eingabe des users?
    kopieren kannst du ganz normal wie andere dateien auch,
    gerade in einem c programm, wo du eh "" machen musst,
    spielt es keine rolle ob da " " dazwischen sind.

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Korrekt.

    Folgendes kleines Testprogramm kopiert auch Dateien mit Leerzeichen im Namen

    Code:
    #include <stdio.h>
    
    int main(int argc, char** args)
    {
        FILE* infile = 0;
        FILE* outfile = 0;
    
        char buffer[10240];
    
        size_t len;
        size_t len2;
        if (argc != 3)
        {
            fprintf(stderr, "wrong number of arguments (%d)\n", argc);
            return 1;
        }
    
        infile = fopen(args[1], "r");
        if (infile == NULL)
        {
           fprintf(stderr, "cannot open source file %s\n", args[1]);
           return -1;
        }
        printf("opening \"%s\" for read\n", args[1]);
    
        outfile = fopen(args[2], "w");
        if (outfile == 0)
        {
           fclose(infile);
           fprintf(stderr, "cannot open destination file %s}n", args[2]);
        }
    
        printf("opening \"%s\" for write\n", args[2]);
    
        while (!feof(infile))
        {
            len = fread(buffer, 1, 10240, infile);
            printf("read %d bytes\n", len);
            if (len > 0)
            {
                len2 = fwrite(buffer, 1, len, outfile);
                printf("wrote %d bytes", len2);
            }
        }
    
        fclose(infile);
        fclose(outfile);
    
        return 0;
    }
    Wie man leicht sehen kann, ganz normale fXXX Befehle.
    Wäre mit open/read/write auch gegangen

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    ich versuch's mal in shellscript, denn es wurde ja nicht vorgegeben womit das Ganze erledigt werden muß:
    Code:
    find . -name "*suchmuster" -exec cp {} /usr/neuesDir \;
    @anda_skoa

    meine Lösung ist ausnahmsweise mal kürzer als deine
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  5. #5
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150
    ihr habt mich falsch verstanden.
    Ich möchte das ganze via exec und cp in mein C Programm einbetten, d.h. also durch exec (natürlich davor fork()) mit cp und dann eben den pfad von der datei, und noch den pfad wo die datei hinkopiert werden soll.
    Da kehrt mir aber cp mit einer Fehlermeldung zurück, die eindeutig besagt, dass cp mit dem Leerzeichen nicht zurechtkommt.
    Grüße,
    mithras

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.11.2002
    Ort
    München
    Beiträge
    5
    hast du die lerrzeichen maskiert (mit "datei\ mit\ leerzeichen.txt") ?
    Totale Paranoia ist totales Bewußtsein

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von mithras
    ihr habt mich falsch verstanden.
    Kann schon passieren, wenn du wichtige Details einfach verschweigst.

    Ich möchte das ganze via exec und cp in mein C Programm einbetten, d.h. also durch exec (natürlich davor fork()) mit cp und dann eben den pfad von der datei, und noch den pfad wo die datei hinkopiert werden soll.
    Warum machst du es so?
    Das ist weniger protabel.


    Da kehrt mir aber cp mit einer Fehlermeldung zurück, die eindeutig besagt, dass cp mit dem Leerzeichen nicht zurechtkommt.
    Kannst du den Aufurf kurz posten?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150
    ich muss wohl in meinen string wo leerzeichen enthalten sind, mit einer funktion \ einfügen, sonst kapiert das "cp" nie was es genau machen soll.

    ich werds mal versuchen, und dann hier wieder bekannt geben
    Grüße,
    mithras

  9. #9
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Nehmen wir mal an ich habe iene Daei mit Namen text datei.txt. Meine shell läßt dann auch folgenden Befehl zu:
    Code:
    cp "text datei.txt" "neue text datei.txt"
    Quoted String sollte also gehen.

    Aber gibt's da keine Standardroutine, um denString zu wandeln? Denn jedes Filesystem hat da seine Besonderheit. Versuche mal BONUSTRACK: Frumpy.... auf FAT32 zu schreiben. Das wird nicht gehen, weil der Laufwerksbuchstabe BONUSTRACK: nicht zulässig ist.

    Bein Unix ist hingegen so ziemlich alles erlaubt auch Dateinamen wir -r * (ich buchstabiere: minus, err, leerzeichen, stern) . Ob das sinnvoll ist lasse ich mal dhingestellt. Wenn du den sicher löschen kannst, ist dein Programm OK!

    Hans, der selber keine Ahnung von C und C++ hat
    Geändert von Hans-Georg Normann (29-11-2002 um 17:49 Uhr)
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  10. #10
    Registrierter Benutzer
    Registriert seit
    26.07.2002
    Ort
    Mittelfranken
    Beiträge
    150
    hm jo gute idee hans!
    Nun muss ich nur ein " am Anfang und ein " am Ende des Strings einfügen, also den String im Array um ein Element nach hinten verschieden, und in das erste und letzte Element ein " kopieren, und alles passt
    Grüße,
    mithras

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •