So verschieben Sie eine Datei von einem Ordner in einen anderen Ordner in linux
So verschieben Sie eine einzelne Datei aus einem Ordner in einen anderen Ordner?
Was ich versucht habe,
#include <stdio.h>
int main() {
FILE *tFile;
if (tFile != NULL)
tFile = NULL;
if ((tFile = fopen("TempFile.txt", "rw")) == NULL) {
return -1;
}
mv("TempFile.txt", "../MST");
printf("Done Succesfully\n");
return 0;
}
Fehler :
test.c:17:2: warning: no newline at end of file
/tmp/ccKLWYNa.o(.text+0x5e): In function `main':
: undefined reference to `mv'
collect2: ld returned 1 exit status
Bitte leite mich, wie kann ich dies tun.
HINWEIS:
Manchmal Frage ich mich, warum "no newline at end of file" für eine compilation units main-Datei ist eine Standard-Warnung aktiviert, aber "implizite Deklaration der Funktion" ist es nicht.
Kann ich es in mein Programm ohne die Schaffung von einem anderen Prozess?
es ist
Ich will nicht, um einen anderen Prozess.
mv
ist ein shell-Befehl.Manchmal Frage ich mich, warum "no newline at end of file" für eine compilation units main-Datei ist eine Standard-Warnung aktiviert, aber "implizite Deklaration der Funktion" ist es nicht.
Kann ich es in mein Programm ohne die Schaffung von einem anderen Prozess?
es ist
system()
zu nennen mv
aber sollte man wirklich nur verwenden rename
Ich will nicht, um einen anderen Prozess.
InformationsquelleAutor user2845185 | 2013-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie wirklich Lesen Advanced Linux Programming.
Verschieben (von C) eine Datei von einem Ort zum anderen in der gleichen Datei-system verwenden Sie einfach die umbenennen(2) syscall.
Zumindest für Ihre speziellen Beispiel, werden Sie brauchen, um code:
Wenn Sie wirklich wollen, um
mv TempFile.txt ../MST/TempFile.txt
speziell fürTempFile.txt
nur Sie könnten einfach anrufenrename("TempFile.txt", "../MST/TempFile.txt")
und den Fehler behandeln Fälle wie, schlage ich vor. Wenn Sie sicher sind, dass../MST/
liegen in der gleichen Datei-system als.
dannEXDEV
sollte das nicht passieren, und Sie brauchen nicht zu behandeln, es insbesondere (aber Sie tun müssen, um Fehler zu behandeln).Wenn Sie möchten, um eine Datei zwischen zwei verschiedenen Datei-Systemen, die Sie haben, um die Daten zu kopieren (und vielleicht einige der meta-Daten) sich selbst (und dann entfernen-z.B. mit unlink(2)) der ursprüngliche Quellcode-Datei). Sie konnte erkennen, dass die situation durch verschiedene Mittel: Sie konnte nur versuchen, die
rename
und wennerrno
(siehe errno(3))EXDEV
Sie brauchen, um die Datei zu kopieren. Oder Sie konnte stat(2) für die Abfrage der Quell-Datei(und das Ziel Verzeichnis) meta-Daten-beispielsweise Ihre Größe und das Dateisystem.Natürlich, Sie müssen verstehen, was sind Dateien, die auf Linux - (oder Posix), insbesondere, was ist ein inode....
Könnten Sie verwendet haben
system
mit/bin/mv
(aber vorsichtig sein, über die seltsamen Zeichen, wie Leerzeichen oder Semikolons - in die Pfade der Dateien, die Sie benötigen, zu entkommen, Sie zu vermeiden code-Injektion), anscheinend wollen Sie nicht.Sollten Sie spielen mit strace(1) (oder vielleicht auch
ltrace
) aufmv
in verschiedenen Situationen zu verstehen, was es tut. Auch, studieren Sie den source-code von GNU coreutils bietet/bin/mv
insbesondere in mv.c ...Einige zusätzliche C-oder C++ - Bibliotheken können Sie mit den Funktionen zum verschieben von Dateien (im gleichen Dateisystem, die Sie tun sollten eine
rename
, in verschiedenen Datei-Systemen kopieren Sie die Quellcode-Datei die Daten und vielleicht ein paar meta-Daten und die Verknüpfung der Quelle, also nicht atomic), z.B. in C g_file_move (aus Gio mit Glib von Gnome) oder in C++ copy_file -gefolgt vonremove
im Boost, etc etc....PS. Für temporäre Dateien finden Sie unter tmpfile(3), mkstemp(3), etc...
InformationsquelleAutor Basile Starynkevitch