gpt4 book ai didi

c - rename() 仅适用于程序运行的目录?

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:37 26 4
gpt4 key购买 nike

我正在尝试重命名用户指定目录中的一堆文件,但它似乎只在用户指定程序运行的目录时才有效。例如,从命令行运行时:

./a.out 。 “NewName.txt” 将起作用,而

./a.out .. "NewName.txt" 将不起作用。是否有一个原因?顺便说一句,它在 Linux 上。

int main(int argc, char** argv){
char* dirpath = argv[1];
char* newName = argv[2];

DIR *d;
struct dirent *dir;
d = opendir(dirpath);
if (d){
while ((dir = readdir(d)) != NULL){
char* filename = dir->d_name;
if (rename(filename,newName) == 0){
printf("Renaming %s -> %s\n",filename,newName);
} else {
printf("Could not rename %s\n",filename);
}
}
}
closedir(d);
}

我也尝试过(从桌面外部运行程序时):

 if (rename("~/Desktop/test.txt","~/Desktop/test2.txt") == 0){
printf("Renaming %s -> %s\n",filename,newName);
} else {
printf("Could not rename %s\n",filename);
}

还是失败了。

最佳答案

虽然 readdir() 正在从其他目录读取文件名,但您程序的当前目录仍在不同的位置。通常,除非您在源文件名前加上目录路径(以及目标文件名),否则您正在尝试重命名当前目录中不存在的文件。

在伪代码中:

dir = opendir(remote_directory)
foreach name from dir
rename "remote_directory/name" to "remote_directory/othername"
end for

请注意,如果“remote_directory”恰好是 .,即当前目录,则伪代码有效;您不需要对该代码进行特殊处理。

关于c - rename() 仅适用于程序运行的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24744354/

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