2014-11-05 120 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?

相關問題