首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中移动目录

在C中移动目录
EN

Stack Overflow用户
提问于 2016-01-19 20:42:29
回答 1查看 2.9K关注 0票数 0

我试图移动一个目录,它的所有内容都在另一个目录中,我被卡住了。我试图将每个文件从源目录复制到目标目录,然后删除它。我也被困在这里了。但我能用rename()函数做些什么吗?如果是,怎么做?

代码更新

代码语言:javascript
运行
复制
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");
    }
}

还有我的第二个功能。

代码语言:javascript
运行
复制
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);
                }
            }
        }
    }
}

我被困住了,我不知道该怎么做。到目前为止,这就是我所拥有的。

更新:现在我如何专注于我的目标文件夹,并创建一个与我当前所在的文件夹完全相同的文件夹,将复制的文件移到其中?

EN

回答 1

Stack Overflow用户

发布于 2016-01-19 20:52:25

我不太了解can库,但我可以指出几个问题

  • 您没有创建目标(子目录)目录。除非它碰巧已经存在,否则您的副本将失败。
  • 你正在使用硬编码长度为你的路径,很可能是太短。char Path[256]source_file[20]target_file[20]
  • source_file和target_file应该是copy_file的参数,在move_directory()中作为参数对待,但在copy_file()中被声明为堆栈变量。如果这甚至编译,将没有有意义的值设置的任何一个变量。
  • 你在复制文件,而不是移动它们。如果希望移动结构,则需要在成功移动后删除文件和目录。
  • 您正在使用fgetc()和fputc()一次复制一个字符。而是使用缓冲操作(fread() / fwrite())。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34886552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档