好的,这可能是一个简单的解决方案,但经过一些搜索和测试后,我仍然感到困惑.. :(
以下是我编写的代码片段:
int main(int argc, char *argv[]){
int test;
test = copyTheFile("test.txt", "testdir");
if(test == 1)
printf("something went wrong");
if(test == 0)
printf("copydone");
return 0;
}
int copyTheFile(char *sourcePath, char *destinationPath){
FILE *fin = fopen(sourcePath, "r");
FILE *fout = fopen(destinationPath, "w");
if(fin != NULL && fout != NULL){
char buffer[10000];//change to real size using stat()
size_t read, write;
while((read = fread(buffer, 1, sizeof(buffer), fin)) > 0){
write = fwrite(buffer, 1, read, fout);
if(write != read)
return 1;
}//end of while
}// end of if
else{
printf("Something wrong getting the file\n");
return 0;}
if(fin != NULL)
fclose(fin);
if(fout != NULL)
fclose(fout);
return 0;
}
一些快速说明:我对C,编程,尤其是文件I / O非常陌生。我查看了fopen,fread和fwrite的手册页。看了一些示例代码后,我想出了这个。我试图只复制一个简单的文本文件,然后将它放在destinationPath指定的目标文件夹中。
我要将文本文件放入的文件夹名为testdir,我要复制的文件名为test.txt。
我试图在copyFile函数中使用的参数是:
我只是在每次尝试时都获得了打印声明“获取文件时出错”。我想这可能是因为'testdir'是一个文件夹而不是文件,但是我将如何复制到文件夹?
对不起,如果这是一个非常基本的问题,我只是遇到麻烦所以任何建议都会很棒!
此外,如果您想要更多帮助,“copyTheFile”函数应该复制文件而不管格式如何。所以,如果它是一个.jpg或其他东西,它应该复制它。如果你们中的任何一个人看到它有问题,请告诉我。
这适用于Linux上的ISO / POSIX / C89 / C99。
答案 0 :(得分:10)
一开始,您需要包含stdio.h
以提供FILE
和I / O函数声明:
#include <stdio.h>
除此之外,您的程序将为我编译并正常运行。遗憾的是,如果不使用stat()
来检测目标是否是目录,则无法复制到目录,如果是,则在打开文件之前附加文件名。
其他一些小建议:
功能为两个字节的缓冲区(例如4096
)可能更有效,因为它与文件系统和磁盘访问模式排列
传统上,返回状态代码的C函数使用0
表示成功,使用其他值(例如1
表示失败),因此交换返回值可能会减少混淆
当fopen
,fread
或fwrite
等标准库函数失败时,最好使用perror(NULL);
或perror("error prefix");
报告它,可能看起来像:
$ ./a.out ... error prefix: No such file or directory
答案 1 :(得分:0)
如果您尝试在目录中编写新文件,则应该提供要写入的文件的完整路径。在你的情况下
"C:...\Desktop\project\testdir\testfile"