C将文件流作为函数参数传递

时间:2017-05-10 12:17:58

标签: c function file stream

此函数提供无限循环。任何帮助?甚至可以将文件流作为参数传递给函数。

#include<stdio.h>
#include<stdlib.h>
void fcopy(FILE *inFILE1){
FILE *inFILEcopy;
char a;
inFILEcopy=fopen("C:/Users/labuser.pcroot-PC.003/Desktop/empoleecopy.bak","w");
do{
        a=fgetc(inFILE1);
        fputc(a,inFILEcopy);
        if(feof(inFILE1))break;
    }while(1);
}
int main(){

FILE *inFILE;
inFILE=fopen("C:/Users/labuser.pcroot-PC.003/Desktop/empolee.dat","w");
fputs("My name is Anthony",inFILE);
fcopy(inFILE);  


}

2 个答案:

答案 0 :(得分:1)

要总结我的和Phil Brubaker条评论,请以这种方式修改您的代码:

#include<stdio.h>
#include<stdlib.h>

void fcopy(FILE *inFILE1) {
    FILE *inFILEcopy;
    char a;
    inFILEcopy = fopen("C:/Users/scifani/Desktop/empoleecopy.bak", "w");
    do{
        a = fgetc(inFILE1);
        fputc(a, inFILEcopy);
        if (feof(inFILE1))break;
    } while (1);
    fclose(inFILEcopy);
}

int main(){
    FILE *inFILE;
    inFILE = fopen("C:/Users/scifani/Desktop/empolee.dat", "w");
    fputs("My name is Anthony", inFILE);
    fclose(inFILE);
    inFILE = fopen("C:/Users/scifani/Desktop/empolee.dat", "r");
    fcopy(inFILE);
}

答案 1 :(得分:0)

FILE* fcopy(char* yourFile) { // Or parse a FILE like you did but with a pointer

    FILE *inFILEcopy;
    inFILEcopy = fopen("C:/Users/labuser.pcroot PC.003/Desktop/empoleecopy.bak", "w");
    if (inFILEcopy == NULL)
        return NULL; // You'll have to check null to see if fcopy() failed
    FILE* inFILE1 = fopen(yourFile, "r");
    if (inFILE1 == NULL) {
        puts("File to be copied does not exist.\n");
        return NULL;
    }
    for (char a = fgetc(inFILE1); feof(inFILE1);)
    {
       fputc(a, inFILEcopy);
       if (ferror(inFILE1) || ferror(inFILEcopy)) { // If error in one of the two files
           if (fclose(inFILE1))
               puts("Couldn't close inFILE1\n");
           if (fclose(inFILEcopy));
               puts("Couldn't close inFILEcopy\n");
           puts("Error during copy.\n");
           return NULL;
       }
    }
    return inFILEcopy;
}

int main() {

   FILE *inFILE;
   inFILE= fopen("C:/Users/labuser.pcroot-PC.003/Desktop/empolee.dat","w");
   if (inFILE != NULL)
   {
       fputs("My name is Anthony", inFILE);
       if (!ferror(inFILE) || fclose(inFILE)) // If no error when writing and closing works, we can copy
       {
           inFILE = fcopy("C:/Users/labuser.pcroot-PC.003/Desktop/empolee.dat");
           if (inFILE != NULL)
               puts("Copy success\n");
       }
   }
}

我认为这是最好的方法。我对任何改进持开放态度。检查this link如果您对错误检查有任何疑问,有人会解释最佳方法。这应该是完美的。