1. //捕获fopen调用中的错误
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #define MYFILE "missing.txt"
  6. int main(  )
  7. {
  8. FILE* fin;
  9. fin=fopen( MYFILE,"r" );
  10. if( fin==(FILE*)NULL )
  11. {
  12. printf( "%s: %s\n",MYFILE,strerror( errno ) );
  13. exit( -1 );
  14. }
  15. fclose( fin );
  16. return 0;
  17. }
  18. /*数据的读写
  19. 标准的I/O库提供了缓冲接口。有两个非常重要的属性:
  20. 1、系统是分块进行读写的(一个块通常8KB)。字符I/O都写到FILE缓冲区中,
  21. 这个缓冲区满的时候会自动写入介质;
  22. 2、如果数据需要送到像控制台终端这样的交互设备,必须设置fflush或者非缓冲
  23. I/O
  24. */
  25. /********字符接口**********/
  26. //fputc字符接口实例
  27. #include <stdio.h>
  28. #include <errno.h>
  29. int main(  )
  30. {
  31. int i=0;
  32. FILE* fout;
  33. const char string[  ]={
  34. "This\r\nis a test\r\nfile.\r\n\0"
  35. };
  36. fout=fopen("inpfile.txt","w");
  37. if( fout==( FILE* )NULL )
  38. {
  39. printf( "%s: %s\n","inpfile.txt",strerror( errno ) );
  40. exit( -1 );
  41. }
  42. while( string[ i ]!=NULL )
  43. {
  44. fputc( ( int )string[ i ],fout );
  45. ++i;
  46. }
  47. fclose( fout );
  48. return 0;
  49. }
  50. //fgetc字符接口实例
  51. #include <stdio.h>
  52. #include <errno.h>
  53. int main(  )
  54. {
  55. FILE* fin;
  56. fin=fopen( "inpfile.txt","r" );
  57. if( fin==( FILE* )NULL )
  58. {
  59. printf( "%s: %s\n","inpfile.txt",strerror( errno ) );
  60. exit( -1 );
  61. }
  62. int i;
  63. while( (i=fgetc( fin ))&&i!=EOF )
  64. {
  65. printf( "%c",(char)i );
  66. }
  67. return 0;
  68. }
  69. /*
  70. fputc(  )是向文件中写入数据;fgetc是从文件中读取数据
  71. 总结:字符接口使用简单,但是效率不高,最好是在基于字符串的方法不可使用时才使用字符接口
  72. */
  73. /************字符串接口************/
  74. /*提供字符串读写函数4个。fputs和fgets是简单的字符串接口;
  75. fprintf和fscanf更复杂的接口,但提供了更多的功能。
  76. */
  77. //相文件中写入变长字符串
  78. #include <stdio.h>
  79. #include <errno.h>
  80. #include <stdlib.h>
  81. #define LEN 80
  82. int main(  )
  83. {
  84. char line[ LEN+1 ];
  85. FILE* fout;
  86. FILE* fin;
  87. //写入数据
  88. fout=fopen( "testfile.txt","w" );
  89. if( fout==( FILE* )NULL )
  90. {
  91. printf( "%s: %s\n","testfile.txt",strerror( errno ) );
  92. exit( -1 );
  93. }
  94. fin=fdopen( 0,"r" ); //将fin与标准输入流绑定
  95. printf( "Please input some characters,end with CTRL+D:\n" );
  96. //CTRL+D结束输入
  97. while( ( fgets(line,LEN,fin) )!=NULL )
  98. {
  99. fputs( line,fout );
  100. }
  101. fclose( fout );
  102. fclose( fin );
  103. //读取数据
  104. printf( "\nthe characters read from file is:\n" );
  105. char getLine[ LEN+1 ];
  106. fin=fopen( "testfile.txt","r" );
  107. if( fin==(FILE*)NULL )
  108. {
  109. printf( "%s: %s\n","testfile.txt",strerror( errno ) );
  110. exit( -1 );
  111. }
  112. fgets( getLine,LEN,fin );
  113. printf( "%s\n",getLine );
  114. fclose( fin );
  115. return 0;
  116. }
  117. /*fputs向文件中写入,fgets从文件中读取
  118. 总结:要注意不可以同时读写同一个文件。
  119. */
  120. //以ASCII格式输出结构体数据
  121. #include <stdio.h>
  122. #include <errno.h>
  123. #define MAX_LINE 40
  124. #define FILENAME "myfile.txt"
  125. typedef struct
  126. {
  127. int id;
  128. float x_coord;
  129. float y_coord;
  130. char name[ MAX_LINE+1 ];
  131. }MY_TYPE_T;
  132. #define MAX_OBJECTS 3
  133. /*Initialize an array of three objects*/
  134. MY_TYPE_T objects[ MAX_OBJECTS ]={
  135. {0,1.5,8.3,"Frist-object"},
  136. {1,4.5,6.3,"Second-object"},
  137. {2,3.5,7.5,"Thrid-object"},
  138. };
  139. int main(  )
  140. {
  141. int i;
  142. FILE* fout;
  143. fout=fopen(FILENAME,"w" );
  144. if( fout==( FILE* )NULL )
  145. {
  146. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  147. exit( -1 );
  148. }
  149. printf( "Writing...\n" );
  150. for( i=0;i<MAX_OBJECTS;++i )
  151. {
  152. fprintf( fout,"%d %f %f %s\n",objects[ i ].id,objects[ i ].x_coord,
  153. objects[ i ].y_coord,objects[ i ].name);
  154. }
  155. fclose( fout );
  156. printf("Write over\n");
  157. printf("Read from file\n");
  158. FILE* fin=fopen( FILENAME,"r" );
  159. if( fin==(FILE*)NULL )
  160. {
  161. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  162. exit( -1 );
  163. }
  164. MY_TYPE_T objects;
  165. while( !feof(fin) )
  166. {
  167. fscanf( fin,"%d %f %f %s\n",&objects.id,&objects.x_coord,
  168. &objects.y_coord,&objects.name);
  169. printf("%d %f %f %s\n",objects.id,objects.x_coord,
  170. objects.y_coord,objects.name);
  171. }
  172. fclose( fin );
  173. return 0;
  174. }
  175. /**************二进制文件的读写*****************/
  176. /*使用fwirte、fread进行二进制文件的读写
  177. 读写二进制文件的时候,要注意的重要问题是可移植性和字序问题。
  178. Intel采用小字节序,PowerPC和网络采用大字节序
  179. */
  180. #include <stdio.h>
  181. #include <errno.h>
  182. #define MAX_LINE 40
  183. #define FILENAME "myfile.bin"
  184. typedef struct
  185. {
  186. int id;
  187. float x_coord;
  188. float y_coord;
  189. char name[ MAX_LINE+1 ];
  190. }MY_TYPE_T;
  191. #define MAX_OBJECTS 3
  192. /*Initialize an array of three objects*/
  193. MY_TYPE_T objects[ MAX_OBJECTS ]={
  194. {0,1.5,8.3,"Frist-object"},
  195. {1,4.5,6.3,"Second-object"},
  196. {2,3.5,7.5,"Thrid-object"},
  197. };
  198. int main(  )
  199. {
  200. int i;
  201. FILE* fout;
  202. fout=fopen(FILENAME,"w" );
  203. if( fout==( FILE* )NULL )
  204. {
  205. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  206. exit( -1 );
  207. }
  208. printf( "Writing...\n" );
  209. fwrite( ( void* )objects,sizeof( MY_TYPE_T ),3,fout );
  210. fclose( fout );
  211. //使用fread/fseek/rewind读取二进制结构体数据
  212. printf( "Read from file\n" );
  213. MY_TYPE_T object;
  214. FILE* fin=fopen( FILENAME,"r" );
  215. if( fin==( FILE* )NULL )
  216. {
  217. printf( "%s: %s\n",FILENAME,strerror( errno ) );
  218. exit( -1 );
  219. }
  220. //定位到第三个结构体
  221. fseek( fin,( 2*sizeof( MY_TYPE_T ) ),SEEK_SET );
  222. fread( &object,sizeof( MY_TYPE_T ),1,fin );
  223. printf("%d %f %f %s\n",object.id,object.x_coord,
  224. object.y_coord,object.name);
  225. fseek( fin,( 1*sizeof( MY_TYPE_T ) ),SEEK_SET );
  226. fread( &object,sizeof( MY_TYPE_T ),1,fin );
  227. printf("%d %f %f %s\n",object.id,object.x_coord,
  228. object.y_coord,object.name);
  229. //把文件指针复位到文件开头
  230. rewind( fin );
  231. fread( &object,sizeof( MY_TYPE_T ),1,fin );
  232. printf("%d %f %f %s\n",object.id,object.x_coord,
  233. object.y_coord,object.name);
  234. fclose( fin );
  235. return 0;
  236. }
  237. /************************************************/
  238. /*
  239. 总结:上面所有的函数都是有一些基本API来实现的。比如:open/read/write/fdopen/pread/pwrite.
  240. 文件的输入输出API函数也可以用于管道和套接字。另外,文件和字符串操作是面向对象脚本语言的强项,如Ruby,Python.
  241. */

最新文章

  1. Unicode和UTF-8的关系
  2. 哈夫曼树(三)之 Java详解
  3. java interface的两个经典用法
  4. Velocity魔法堂系列一:入门示例
  5. js常见数字处理整理
  6. C#获取进程的主窗口句柄的实现方法
  7. 【Unity3D】生成工程报错解决—UnityEditor.HostView:OnGUI() Error building Player: Couldn&#39;t build player because of unsupported data on target platform.
  8. RadComboBox的用法
  9. Go代理,修改标题
  10. jquery第一期:运行第一个jquery
  11. FreeCodeCamp:Title Case a Sentence
  12. 饼干怪兽和APT攻击
  13. MyBatis浅尝笔记
  14. go语言常用开源库整理
  15. SpringBoot SpringSecurity4整合,灵活权限配置,弃用注解方式.
  16. [BZOJ2048] [2009国家集训队] 书堆
  17. 2018-12-25 VS Code英汉词典v0.0.8: 批量翻译文件部分命名
  18. hdu 2191 (多重背包二进制优化)
  19. 6、Python-元组
  20. 过滤sql特殊字符方法集合

热门文章

  1. BZOJ1044: [HAOI2008]木棍分割
  2. Android的一个自定义的动态添加Dialog类
  3. Android Studio导入Eclipse项目
  4. Android吧数据保存成xml文件
  5. rpm常用操作
  6. 【数学】【NOIp2012】同余方程 题解 以及 关于扩展欧几里得与同余方程
  7. lightoj 1004 dp:数字三角形
  8. linux0.12 解决编译问题常用命令
  9. 谈JSON在Ajax中的使用
  10. ISAP 简介