PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dateien mit leerzeichen im namen kopieren



mithras
26-11-2002, 22:24
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!

msi
27-11-2002, 20:31
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.

anda_skoa
27-11-2002, 20:45
Korrekt.

Folgendes kleines Testprogramm kopiert auch Dateien mit Leerzeichen im Namen



#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,
_

Hans-Georg Normann
27-11-2002, 21:33
ich versuch's mal in shellscript, denn es wurde ja nicht vorgegeben womit das Ganze erledigt werden muß:

find . -name "*suchmuster" -exec cp {} /usr/neuesDir \;

@anda_skoa

meine Lösung ist ausnahmsweise mal kürzer als deine:D

mithras
28-11-2002, 15:34
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.

trimix91
28-11-2002, 16:50
hast du die lerrzeichen maskiert (mit "datei\ mit\ leerzeichen.txt") ?

anda_skoa
28-11-2002, 20:17
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,
_

mithras
29-11-2002, 16:27
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

Hans-Georg Normann
29-11-2002, 17:46
Nehmen wir mal an ich habe iene Daei mit Namen text datei.txt. Meine shell läßt dann auch folgenden Befehl zu:
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

mithras
29-11-2002, 19:55
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 ;)