【发布时间】:2016-04-25 12:03:43
【问题描述】:
我试图将一个目录及其所有内容移动到另一个目录中,但我被卡住了。我正在尝试将每个文件从源目录复制到目标目录,然后将其删除。我也陷入了困境。但是我能以某种方式使用rename() 函数吗?如果是,怎么做?
代码更新
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);
}
}
}
}
}
我被困住了,我不知道应该如何进行。这就是我目前所拥有的。
更新:我现在如何专注于我的目标文件夹并创建一个与我当前所在的文件夹完全相同的文件夹,我应该将复制的文件移动到该文件夹中?
【问题讨论】:
-
请详细说明“我被卡住了”:您已经走了多远,您遇到了哪些问题?
-
这就是我所拥有的一切。我很不知道要在我想搬家的地方和地点之间建立联系。我再次尝试复制每个文件。在这种情况下可以使用 rename() 吗?
-
rename() 要求两个文件位于同一文件系统上。您不能使用它将目录从一个磁盘移动到另一个磁盘。 gnu.org/software/libc/manual/html_node/Renaming-Files.html
-
那么,唯一的解决方案是复制每个文件然后删除它?但是我仍然不知道如何在要复制的内容和要复制的位置之间建立联系...