在 C 语言中测试复制文件功能时出现问题



好的,所以这可能是一个简单的解决方案,但经过一些搜索和测试,我仍然感到困惑。 :(

这是我编写的代码片段:

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 filen");       
        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 函数中使用的参数是:

  • "测试.txt" "测试目录"
  • ".../Desktop/project/
  • test.txt" ".../Desktop/project/testdir"
  • "/Desktop/project/
  • test.txt" "/Desktop/project/testdir"

每次尝试时,我都会收到打印语句"获取文件时出错"。我想这可能是因为"testdir"是一个文件夹而不是一个文件,但是我将如何复制到文件夹?

对不起,如果这是一个非常基本的问题,我只是遇到了麻烦,所以任何建议都会很棒!

此外,如果您想提供额外的帮助,"copyTheFile"功能应该复制文件,无论格式如何。所以就像如果它是一个.jpg或其他东西,它应该复制它。如果你们中的任何人发现它有问题,请告诉我。

这是Linux上的ISO/POSIX/C89/C99。

一开始,您需要包含stdio.h以提供FILE和 I/O 函数声明:

#include <stdio.h>

除此之外,您的程序还可以为我编译并正常工作。遗憾的是,如果不使用 stat() 来检测目标是否为目录,则无法复制到目录,如果是,则在打开文件之前附加文件名。

其他一些小建议:

    具有
  • 两个字节的幂的缓冲区(如 4096)可能更有效,因为它与文件系统和磁盘访问模式对齐

  • 传统上,返回状态代码的 C 函数使用 0 表示成功,使用其他值(如 1)表示失败,因此交换返回值可能不那么令人困惑

  • 当标准库函数(如 fopenfreadfwrite)失败时,最好使用 perror(NULL);perror("error prefix"); 来报告它,这可能如下所示:

    $ ./a.out...错误前缀:没有此类文件或目录

如果您尝试在目录中写入新文件,则应提供要写入的文件的完整路径。 在您的情况下

"C:...Desktopprojecttestdirtestfile"

最新更新