c语言文件操作fwrite和fread C语言中,非二进制文件能不能用fwrite/fread函数?...
C\u8bed\u8a00\u6587\u4ef6\u64cd\u4f5c\uff0cfread()\u548cfwrite()\u51fd\u6570\u7684\u7b2c\u4e09\u4e2a\u53c2\u6570\u7684\u610f\u4e49\u7b2c\u4e09\u4e2a\u53c2\u6570count\u662f\u4f60\u8bfb\u53d6\u7684\u6570\u636e\u4e2a\u6570\uff0c\u6570\u636e\u5927\u5c0f\u4e3a\u4f60\u7684\u7b2c\u4e8c\u4e2a\u53c2\u6570size\u7684\u503c\u3002\u5373\u8bfb\u53d6count\u4e2asize\u5927\u5c0f\u7684\u6570\u636e\u3002
\u53ef\u4ee5\u7684\uff0c\u8bfb\u6587\u4ef6\u90fd\u53ef\u4ee5fread\uff0cfwrite\u6765\u8bfb\u5199
\u6bd4\u5982\uff1a
FILE* pfile;
pfile = fopen(\u201ca.txt\u201d, "r"); // \u8fd9\u91cc\u662f\u4e0d\u662f\u4ee5\u4e8c\u8fdb\u5236\u6253\u5f00\u6587\u4ef6\uff0c\u800c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u5982\u679c\u5199\u6210 "rb"\uff0c\u5c31\u662f\u4ee5\u4e8c\u8fdb\u5236\u6253\u5f00\u6587\u4ef6\uff0c\u4f7f\u7528fread\uff0cfwrite\u51fd\u6570\u90fd\u662f\u5141\u8bb8\u7684
fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:
//读取一个完整的文件
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* pFile; //文件指针
long lSize; // 用于文件长度
char* buffer; // 文件缓冲区指针
size_t result; // 返回值是读取的内容数量
pFile = fopen("myfile.bin" , "rb");
if (pFile == NULL) {fputs("File error", stderr); exit(1);} // 如果文件错误,退出1
// 获得文件大小
fseek(pFile , 0 , SEEK_END); // 指针移到文件末位
lSize = ftell(pFile); // 获得文件长度
rewind(pFile); // 函数rewind()把文件指针移到由stream(流)指定的开始处, 同时清除和流相关的错误和EOF标记
// 为整个文件分配内存缓冲区
buffer = (char*) malloc(sizeof(char) * lSize); // 分配缓冲区,按前面的 lSize
if (buffer == NULL) {fputs("Memory error", stderr); exit(2);} // 内存分配错误,退出2
// 该文件复制到缓冲区
result = fread(buffer, 1, lSize, pFile); // 返回值是读取的内容数量
if (result != lSize) {fputs("Reading error", stderr); exit(3);} // 返回值如果不和文件大小,读错误
// terminate // 文件终止
fclose(pFile);
free(buffer);
return 0;
}
综合使用的例子。
#include <stdio.h>
int main()
{
FILE* pFile;
float buffer[] = { 2.0 , 3.0 , 8.0 };
pFile = fopen("myfile.bin" , "wb"); // 打开文件写操作
fwrite(buffer , 1 , sizeof(buffer) , pFile); // 把浮点数组写到文件 myfile.bin
fclose(pFile); // 关闭文件
float read[3];
pFile = fopen("myfile.bin" , "rb"); // 重新打开文件读操作
fread(read , 1 , sizeof(read) , pFile); // 从文件中读数据
printf("%f%f%f
", read[0], read[1], read[2]);
fclose(pFile); // 关闭文件
return 0;
}
无语的写法..
你根本分不清什么事数字 什么事字符
如果你要输出txt里面的内容比较简单.
char buf[1024];
fread(&stud[j],sizeof(struct student),1,fp1);
改成
fread(buf,1024,1,fp1);
printf 改成 printf(%s, buf);
如果你要把 txt里面的字符变成数据.
那就需要解析txt了
读了你的代码,我觉得,你在用fread的时候,其实你的意图是想将1.txt中的每一行按照你所定义的structure student中的字段格式,进行读取,将你的stud一个一个填充好。很遗憾,fread并不能做这件事情。fread会将1.txt中的每行看做一整个字符串,写到你给的每个&stud[j]开头的地址空间中,而无视你所给定的structure的定义,自然你printf就得不到预想的结果了。而fwrite倒是可以原原本本将写入的字串回写出来。
如果你想要按structure的格式读入1.txt的数据,那么就要用scanf咯。就像printf那样,scanf的用法你一定是懂的。
绛旓細fwrite(buffer,size,count,fp);涓句釜渚嬶細fwrite(&id,1,10,f)灏辨槸鎶奿d閲岄潰鐨勫煎啓鍒癴閲岄潰锛屾瘡娆″啓1涓瓧鑺傦紝涓鍏卞啓10娆℃垨鏄痜read(&id,10,1,f)灏辨槸鎶奿d閲岄潰鐨勫艰鍒伴噷闈紝姣忔璇10涓瓧鑺傦紝涓鍏辫1娆°傚弬鏁板垎鍒槸鎸囬拡锛屾暣鍨嬶紝鏁村瀷锛屾寚閽 ...
绛旓細fwrite(buffer,size,count,fp);2008-11-24 23:05鍔熻兘:鍐欏唴瀹瑰埌娴佷腑 锛1锛塨uffer锛氭槸涓涓寚閽堬紝瀵筬write鏉ヨ锛屾槸瑕佽緭鍑烘暟鎹殑鍦板潃銆傦紙2锛塻ize锛氳鍐欏叆鐨勫瓧鑺傛暟锛涳紙3锛塩ount:瑕佽繘琛屽啓鍏ize瀛楄妭鐨勬暟鎹」鐨勪釜鏁帮紱锛4锛塮p:鐩爣鏂囦欢鎸囬拡銆
绛旓細鍏舵锛屼娇鐢鏂囦欢璇诲啓鍑芥暟璇诲彇鏂囦欢銆傚湪C璇█涓彁渚涗簡澶氱鏂囦欢璇诲啓鐨勫嚱鏁帮細路瀛楃璇诲啓鍑芥暟 锛歠getc鍜宖putc 路瀛楃涓茶鍐欏嚱鏁帮細fgets鍜宖puts 路鏁版嵁鍧楄鍐欏嚱鏁帮細freed鍜宖write 路鏍煎紡鍖栬鍐欏嚱鏁帮細fscanf鍜宖prinf 鏈鍚庯紝鍦ㄦ枃浠惰鍙栫粨鏉熻浣跨敤鏂囦欢鍏抽棴鍑芥暟fclose锛堬級鍏抽棴鏂囦欢銆備笅闈互鏍煎紡鍖栬鍐欏嚱鏁癴scanf鍜宖pri...
绛旓細fwrite 鍔熻兘璇存槑 灏嗘暟鎹啓鑷鏂囦欢 琛ㄥご鏂囦欢 stdio.h 鍑芥暟瀹氫箟 size_t fwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream)鍑芥暟璇存槑 fwrite锛堬級鐢ㄤ簬灏嗘暟鎹啓鍏ユ枃浠朵腑銆傚弬鏁皊tream涓哄凡鎵撳紑鏂囦欢鐨勬枃浠剁被鍨嬫寚閽堬紱ptr涓烘寚鍚戝瓨鏀惧啓鍏ユ暟鎹唴瀛樼殑鎸囬拡锛涙诲叡鍐欏叆nmemb涓崟鍏冪殑鏁版嵁锛屾瘡鍗曞厓鏈塻ize...
绛旓細璋冪敤fwrite鍑芥暟鏃讹紝濡傛灉纰板埌鎹㈣绗︼紙0x0A锛夛紝缂栬瘧鍣ㄤ細鑷姩杞崲涓哄洖杞︽崲琛岀锛0x0D 0x0A锛夛紝鐒跺悗鍐欏叆鏂囦欢銆傝繖鏍峰啓鍏ユ枃浠剁殑鏁版嵁灏变細涓庡師濮嬫暟鎹湁宸紓銆
绛旓細鐒跺悗鍐欏叆淇敼鐨勯儴鍒嗭紝鍐嶆妸鍚庝竴閮ㄥ垎娌℃湁淇敼鐨勶紝鍐欏埌鏂鏂囦欢涓幓銆傜劧鍚庢枃浠堕噸鍛藉悕銆傚師鏂囦欢鏀瑰悕澶囦唤鏂囦欢锛屾柊鏂囦欢鏀瑰悕鍘熸枃浠躲傚鏋滀慨鏀圭殑鏁版嵁寰堝皯N~100N KB锛孨~10N MB 鍙互鐢ㄧ紦鍐插尯澶勭悊濂戒慨鏀癸紝鍐嶅啓鍏ユ枃浠躲FILE脳 fopen fseek fwrite fclose PS锛1锛夊鏋滀慨鏀圭殑鍐呭锛屽拰鍘熸枃浠惰淇敼鐨勬暟鎹紝瀛楄妭鏁板畬鍏...
绛旓細if((fp=fopen("source.txt","wb"))==NULL)琛ㄧず浣犻噰鐢ㄧ殑鏄簩杩涘埗鐨勫舰寮忔潵鍐欏叆鏂囦欢 鍚岀悊 fp=fopen("source.txt","rb");/*鎵撳紑鏂囦欢source.txt*/ 琛ㄧず浣犵敤浜岃繘鍒剁殑褰㈠紡鏉ヨ鍙栨枃浠 浣跨敤浜岃繘鍒跺舰寮忚鍙栨垨鍐欏叆鏂囦欢锛屾枃浠堕噰鐢ㄧ殑鏄簩杩涘埗褰㈠紡淇濆瓨锛岄噰鐢ㄨ浜嬫湰鎵撳紑鍚庝細鍑虹幇涔辩爜銆
绛旓細鍦ㄤ袱涓瓧绗︿覆涔嬮棿鍐欏叆涓涓洖杞︾.include <stdio.h> main(){ char a[4]="abc";char c='\n';char b[4]="def";FILE *one;a[3]='\0';b[3]='\0';one=fopen("E:\\666.txt","w+");fwrite(&a,strlen(a),1,one);fwrite(&c,1,1,one);/*鍐欏叆涓涓洖杞︾*/ fwrite(&b,...
绛旓細fwrite鍑芥暟鏄鐩栬屼笉鏄彃鍏ャ傚彧瑕佹墦寮鏂囦欢鏃剁煡鍚嶆敮鎸佸啓鎿嶄綔锛岄偅涔堜娇鐢╢write鍑芥暟鏃跺潎鏄鐩栨ā寮忥紝鑰屼笉浼氭彃鍏ャ傚嵆鍦ㄥ綋鍓嶄綅缃啓鍏ユ暟鎹紝鍚庣画鏁版嵁骞朵笉浼氫緷娆″悗绉伙紝鑰屾槸鐩存帴瑕嗙洊銆傛瘮濡傦紝濡傛灉鏂囦欢涓湁鏁版嵁123456789,鍦3鐨勪綅缃啓鍏ュ瓧绗bc锛岄偅涔堢粨鏋滀负 12abc6789銆傚鏋滆瀹炵幇鎻掑叆鏁堟灉锛屽彲浠ュ皢鍚庣画鏁版嵁璇诲埌鍐呭瓨锛岀劧鍚...
绛旓細//鍦鏂囦欢鏈熬杩藉姞鍐呭 int fileAppend(char fileName[] ,char content[],int content_len){ FILE *outfile;outfile=fopen(fileName,"a");fwrite(content,content_len,1,outfile);fclose(outfile);} int fileClear(char fileName[]){ FILE *file = fopen(fileName,"w");fclose(file);} //...