C++/C : Move Directory to Another Location

标签 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

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

最佳答案

编辑:这是指原始帖子,内容为 FILE * src = opendir( argv[1] );

函数 opendir() 返回一个 DIR *,它与 FILE * 完全不同(并且不能用作参数到 getc()/putc()

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

编辑:这是指更新后的帖子。

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

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


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

关于C++/C : Move Directory to Another Location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12793298/

相关文章:

linux - 在 Linux 中创建一个新信号

linux - 在hdfs路径中创建目录

java字符串匹配大文本文件问题

c - 尝试从 TLS 数据包中提取 SNI 时出现 BPF 验证错误

C - 无法读取用户整数输入

c - 在二维数组中分配内存时出现问题

linux - 查看服务是否正在使用退出代码运行

regex - 在 Perl 中从文件中逐行提取以特定字符开头的单词

python shutil.copytree - 忽略权限

c - 服务器到客户端通信 gRpc