我有一个文本文件,其中包含我想要从一个文件夹转移到另一个文件夹的大约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',因为我需要在读取初始文本文件时更新它们。
答案 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;在该代码中。
希望它有所帮助!