如何在UNIX下使用(C)将文件从一个文件夹传输到另一个文件夹?

时间:2014-07-07 08:42:49

标签: c file directory

我有一个文本文件,其中包含我想要从一个文件夹转移到另一个文件夹的大约800个文件的名称。基本上,文本文件如下所示:

file1.aaa (End of line)
file2.aaa
..
etc

我使用“重命名”功能制作了这段代码,正如大家在互联网上所建议的那样:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ( void )
{
    FILE *file = fopen ( "C:\\Users\\blabla\\ListOfFiles.txt", "r" );
    char path1[100] = "C:\\blabla\\folder1\\";
    char path2[100] = "C:\\blabla\\folder2\\";
    char *s1;
    char *s2;

    char line [20]; /* the file names won't be any longer than that */
    while(fgets(line, sizeof line,file) != NULL)
    {
        char *filePath1 = (char *) malloc((strlen(path1) + strlen(line) + 1) * sizeof(char));
        char *filePath2 = (char *) malloc((strlen(path2) + strlen(line) + 1) * sizeof(char));
        filePath1 = strcpy(filePath1, path1);
        filePath2 = strcpy(filePath2, path2);
        strcat(filePath1,line);
        strcat(filePath2,line);


       if (rename(filePath1, filePath2) != 0)
       {
           perror("wrong renaming");
           getchar();
       }

       free(filePath1);
       free(filePath2);

    }

    fclose (file);

    return 0;
}

现在,当我打印文件路径时,我得到了预期的结果,但程序在应该运行“重命名”函数时停止运行,因为参数无效问题。 我看了http://www.cplusplus.com/并注意到它说rename()的参数应该是const char *,这可能是问题的来源吗?但如果是这样,我不知道如何将我的参数变成'const',因为我需要在读取初始文本文件时更新它们。

2 个答案:

答案 0 :(得分:0)

构建文件路径的代码非常复杂,但应该可以工作。要简化它,请删除malloc()并使用两个静态大小的数组。此外,对于未来,please don't cast the return value of malloc() in C

你误解了const这个东西,这意味着rename()不会改变它的两个参数指向的字符。这是一种说“这两个指针指向仅对该函数输入的数据的方法,将不会尝试从函数内部修改该数据”。你应该尽可能const参数指针,这有助于使代码更多更清晰。

如果您收到“无效参数”,则可能意味着找不到文件。打印出文件名以帮助您验证。

答案 1 :(得分:0)

我建议你看看:

How can I copy a file on Unix using C?

并替换&#34; / bin / cp&#34; for&#34; / bin / mv&#34;在该代码中。

希望它有所帮助!