gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:31:27 25 4
gpt4 key购买 nike

我有一个文本文件,其中包含大约 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”,因为我需要在读取初始文本文件时更新它们。

最佳答案

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

您误解了 const 的意思,它意味着 rename() 不会更改其两个参数指向的字符。这是一种说法,“这两个指针指向仅输入到该函数的数据,不会尝试从函数内部修改该数据”。如果可能的话,您应该始终使用const参数指针,这有助于使代码更加更加清晰。

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

关于c - UNIX下如何使用(C)将文件从一个文件夹传输到另一个文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24606385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com