C ++将一个目录移动到另一个目录

时间:2012-10-09 05:24:59

标签: c++ linux file unix directory

所以基本上我将一个目录的所有内容移动到另一个目录。我通过命令行获取输入。这是代码:

#include <stdlib.h>
#include <stdio.h>

void move_dir(FILE *src, FILE *dest) {
    int c = getc(src);
    while(getc(src)!=EOF) {
        putc(c,dest);
    }
}

int main(int argc, char* argv[])
{
    FILE *src=fopen(argv[1]);
    FILE *dest=fopen(argv[2]);
    while(--argc>0) {
        if(src!=NULL && dest!=NULL) {
            move_dir(src,dest);
        }
    }
    fclose(src);
    fclose(dest);
    return 0;
}

所以用户可以说:

./a.out /Folder1/Folder2/Source /Folder1

这将在Folder1中移动名为Source的文件夹。但是,当我执行此代码时,它不起作用。它可以很好地编译g ++并且在运行时没有错误,但它根本不会移动任何东西。关于什么可能出错的任何想法?

1 个答案:

答案 0 :(得分:3)

修改:这是指原帖FILE * src = opendir( argv[1] );

函数opendir()返回DIR *,与FILE *完全不同(不能用作getc() / putc()的参数。

您必须使用DIR *readdir()读取目录条目,这将生成文件名,然后使用该信息复制该文件。

修改:这是指更新的帖子。

您不在目录上使用文件函数(fopen()getc()等)。要走的路是opendir(),然后是readdir(),然后根据生成的文件名进行操作。

我真的不知道为什么目录上的fopen()实际上返回一个非空指针。就个人而言,我认为这是一个设计缺陷,因为FILE *上的可能操作没有为目录定义。我会清除这种结构。


一般来说,您应该阅读您正在使用的函数的文档(手册页),而不是(错误地)假设它们。当你在这里时,也要检查返回值 - 他们可能会告诉你为什么事情没有按预期工作。