2014-11-05 191 views
-1

我有将ASCII代码文件转换为二进制文件的问题。该代码能够读取文件并将数据打印到其他文件中,如ASII代码(使用fprintf);但是,当我尝试从ASII代码转换为二进制文件(使用fwrite)时,然后再次使用(fread)该文件。它不会产生正确的答案。我怀疑fwrite函数可能不起作用。您能否就如何解决这个问题提出建议?非常感谢你。将Ascii代码文件转换为二进制文件

============================================ 
Code to convert from ASCII to binary file 
=========================================== 
# include <stdio.h> 
# include <stdlib.h> 
# include <string.h> 

typedef struct _FileData 
{ 
int a; 
double b; 
char dataStr[56]; 
}FileData; 


int main() 
{ 
// open read file 
FILE * infile=fopen("output.txt", "r"); 
if(infile==NULL) 
{ 
    printf("Error opening file"); 
    exit(1); 
} 

// open write file 
FILE * outfile = fopen("out_file.txt","wb"); 
if(outfile==NULL) 
{ 
    printf("Error writting on file"); 
    exit(1); 
} 

FileData input; // pointer for read file 
FileData output; // pointer for write file 

while(fscanf(infile,"%d %lf %[^\n]s",&input.a,&input.b,&input.dataStr)==3) 
{ 
    /*printf("%d\n",input.a); 
    printf("%.3lf\n",input.b); 
    printf("%s\n",input.dataStr);*/ 
    //fprintf(outfile,"%d\n %.3lf\n %s\n",input.a,input.b,input.dataStr); 
    fwrite(&output,sizeof(FileData),1,outfile); 


} 
fclose(infile); 
fclose(outfile); 
return 0; 
    } 
============================================================== 
Code to convert from binary file to ASCII code file 
============================================================= 
# include <stdio.h> 
# include <stdlib.h> 
# include <string.h> 

typedef struct FileData 
{ 
int a; 
double b; 
char dataStr[56]; 
}FileData; 
int main() 
{ 

FILE * infile=fopen("out_file.txt", "rb"); 
if(infile==NULL) 
{ 
printf("Error opening file"); 
} 
FileData input; 
while(fread(&input,sizeof(struct FileData),sizeof(struct FileData),infile)) 
{ 
printf("%d\n",input.a); 
printf("%.3f\n",input.b); 
printf("%s\n",input.dataStr); 
} 

return 0; 
} 

=========================================================== 
Data 
========================================================== 

47 
34.278 
This is a line of text 

48 
23.678 
This a very very long line 

回答

1
fread(&input,sizeof(struct FileData),sizeof(struct FileData),infile) 

应改为

fread(&input,sizeof(struct FileData),1,infile) 

要写1结构尺寸的sizeof(struct FileData)

同时检查的mash5的答案在他建议写变量input,而不是output而用fwrite写。

+0

非常感谢您的评论。它完美的作品 – SunnyTrinh 2014-11-05 14:47:53

0

在你的ASCII的转换代码,输入文件读入一个变量input

fscanf(infile,"%d %lf %[^\n]s",&input.a,&input.b,&input.dataStr) 

,但不同的,未初始化变量output被写入到输出文件:

fwrite(&output,sizeof(FileData),1,outfile); 

也许你应该写

fwrite(&input,sizeof(input),1,outfile); 

inst EAD?

相关问题