Я пытаюсь переместить каталог со всем содержимым внутри другого каталога, и я застрял. Я пытаюсь скопировать каждый файл из исходного каталога в пункт назначения, а затем удалить его. Я тоже застрял в этом. Но могу ли я как-то с помощью функции rename()
. Если да, то как?Рекурсивный каталог перемещения в C
КОД UPDATE
void move_file(const char *name, const char *new_name) {
size_t len = 0;
char *buffer;
long lSize;
FILE *source = fopen(name, "r");
FILE *target = fopen(new_name, "w");
if (source == NULL || target == NULL) {
fprintf(stderr, "Error occurred when opening files\n");
exit(1);
}
fseek(source, 0, SEEK_END);
lSize = ftell(source);
rewind(source);
buffer = (char*)malloc(sizeof(char) * lSize);
result = fread(buffer, 1, lSize, source);
if (result != lSize) {
fprintf(stderr, "Reading error\n");
exit(2);
}
fwrite(buffer, 1, sizeof(buffer), target);
fclose(source);
fclose(target);
if (!remove(source)) {
fprintf(stderr, "Error deleting file\n");
}
}
И моя вторая функция.
void move_directory(const char *target, const char *destination) {
DIR *dir = opendir(target);
if (dir) {
char Path[256];
char *EndPtr = Path;
struct dirent *e;
strcpy(Path, target);
EndPtr += strlen(target);
while ((e = readdir(dir)) != NULL) {
struct stat info;
strcpy(EndPtr, e->d_name);
if (!strcmp(e->d_name, ".") || !strcmp(e->d_name, "..")) {
continue;
}
if (!stat(Path, &info)) {
if (S_ISDIR(info.st_mode)) {
move_directory(Path);
} else
if (S_ISREG(info.st_mode)) {
move_file(e->d_name, e->d_name);
}
}
}
}
}
Я застрял, у меня нет никаких идей, как я должен действовать. Это то, что у меня есть до сих пор.
UPDATE: Как я могу теперь сосредоточиться на своей папке назначения и создать папку, точно такую же, как у меня в настоящее время, где мои скопированные файлы должны быть перенесены?
Просьба подробно остановиться на «Я застрял»: как далеко вы получили, и с каким аспектом у вас возникли проблемы? –
Это все, что у меня есть. Я довольно не знаю, как сделать связь между тем, что и где я хочу двигаться. Я еще раз, я пытался копировать каждый файл. Можно ли переименовать() использовать в таких ситуациях? –
rename() требует, чтобы оба файла находились в одной файловой системе. Вы не могли использовать его для перемещения каталога с одного диска на другой. http://www.gnu.org/software/libc/manual/html_node/Renaming-Files.html –