我想要的是获取目录中存在的所有文件,然后向该文件添加 .enc 扩展名。示例-让 File.txt 存在然后我将执行一些与加密相关的任务,之后新文件名将是 File.txt.enc
这是我的代码:
#include <dirent.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
DIR *d;
struct dirent *dir;
char *name;
int val;
d = opendir(".");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
name=dir->d_name;
printf("File Found:%s\n",name);
strcat(name,".enc");
val=rename(dir->d_name,name);
if(val==0)
printf("Encrypted File:%s\n",name);
else
perror("Error: ");
}
closedir(d);
}
return(0);
}
Run Code Online (Sandbox Code Playgroud)
但我得到这样的输出......
File Found:write_pgm_img.c
Error: : No such file or directory
File Found:realloc.c
Error: : No such file or directory
File Found:getusage.txt
Error: : No such file or directory
File Found:directory.c
Error: : No such file or directory
Run Code Online (Sandbox Code Playgroud)
正如您所看到的“没有这样的文件或目录”错误。但我不明白为什么?请解释。提前致谢。
你搞乱了指针和内存内容:
name=dir->d_name;
printf("File Found:%s\n",name);
strcat(name,".enc");
val=rename(dir->d_name,name);
Run Code Online (Sandbox Code Playgroud)
第一行后,name并dir->d_name指向相同的内存地址。这意味着您尝试向所在的内存添加后缀dir->d_name。你不能指望内存足够大来保存你的后缀。(但在这种情况下,这不会导致问题,因为您的文件名似乎足够短)
您的更新也会以同样的方式影响两者name,dir->d_name这使得重命名毫无意义,因为您尝试重命名getusage.txt.enc为getusage.txt.enc
一个可能的解决方案可能是:
char name[sizeof(dir->d_name)+4];
while ((dir = readdir(d)) != NULL)
{
strcpy(name, dir->d_name);
printf("File Found:%s\n",name);
strcat(name,".enc");
val=rename(dir->d_name,name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |