C语言基础文件读写操作
整理了一份C语言的文件读写件操作代码,测试时打开相应的注释即可。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h> /*
* EOF: 符号常量,其值为-1.
* fgets() 最多读取int-1个字符,遇换行或EOF即返回.
* fputs() 写文件时,忽略字符串截止符'\0'.
* fread()和fwrite() 数据块读写,多用于结构体数组(顺序存储的结构体).
*
* 函数原型:
* 读:
* int fgetc(FILE *stream);
* char *fgets(char *s, int size, FILE *stream);
* size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
* int fscanf(FILE *stream, const char *format, ...);
* 写:
* int fputc(int c, FILE *stream);
* int fputs(const char *s, FILE *stream);
* size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
* int fprintf(FILE *stream, const char *format, ...);
* 其他:
* void rewind(FILE *stream); 将文件内部的位置指针重新指向一个流(数据流/文件)的开头.
*
* 打开方式:
* r(read): 读
* w(write): 写
* a(append): 追加
* +: 读和写
* t(text): 文本文件,可省略不写
* b(banary): 二进制文件
*/ FILE *fp = NULL; // READ
void GetCharFromFile(FILE *fp)
{
int ch = ; while ((ch=fgetc(fp)) != EOF) //失败时返回 EOF
{
printf("fget: [%c]\n", ch);
}
} void GetLineFromFile(FILE *fp)
{
char line[] = ""; while (fgets(line, sizeof(line), fp) != NULL) //失败时返回 NULL
{
printf("fgets: [%s]\n", line);
}
} void GetBlockFromFile(FILE *fp)
{
int i = ;
int block[] = {};
int count = ; while (fread(block, sizeof(block), count, fp) == count) //失败时返回值 != count
{
printf("fread: ");
for (i=; i<; i++)
{
printf("%d ", block[i]);
}
printf("\n");
}
} void ReadFormatToFile(FILE *fp)
{
char file[] = "";
char func[] = "";
char date[] = "";
int line = ; fscanf(fp, "%s %s %d %[^\n]", file, func, &line, date); //返回读取元素个数,eg:4
printf("file: %s\n", file);
printf("func: %s\n", func);
printf("line: %d\n", line);
printf("date: %s\n", date);
} // WRITE
int WriteCharToFile(FILE *fp, char ch)
{
int ret = ; ret = fputc(ch,fp); //失败时返回EOF
return ret!=EOF?:-;
} int WriteStrToFile(FILE *fp, char *str)
{
int ret = ; ret = fputs(str, fp);
return ret!=EOF?:-; //失败时返回EOF
} int WriteBlockToFile(FILE *fp, const void *block, int size, int count)
{
int ret = ; ret = fwrite(block, size, count, fp); //失败时返回值 != count
return ret!=count?-:;
} int WriteFormatToFile(FILE *fp)
{
int ret = ; ret = fprintf(fp, "%s %s %d %s\n", __FILE__, __func__, __LINE__, __DATE__);
return ret<?-:; //失败时返回一个负值
} // MAIN
int main(int argc, char **argv)
{
char ch = 'r';
char *str = "Hello World.\n";
int block[] = {,,,,,,,,,};
char *filePath = "./ll"; fp = fopen(filePath, "w+"); //不关心文件存在与否,每次重写文件,并可读
if (NULL == fp)
{
perror("fopen");
return -;
} // WRITE
// printf("WriteCharToFile: %s\n", WriteCharToFile(fp, ch)?"Fail":"Success");
printf("WriteStrToFile: %s\n", WriteStrToFile(fp, str)?"Fail":"Success");
// printf("WriteBlockToFile: %s\n", WriteBlockToFile(fp, block, sizeof(block), 1)?"Fail":"Success");
// printf("WriteFormatToFile: %s\n", WriteFormatToFile(fp)?"Fail":"Success"); rewind(fp);
// READ
// GetCharFromFile(fp);
GetLineFromFile(fp);
// GetBlockFromFile(fp);
// ReadFormatToFile(fp); fclose(fp);
return ;
}
C语言基础文件读写操作的更多相关文章
- C语言的文件读写操作函数小结
一.文件打开 使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE包含了所有用来控制流的必要的信息.函数原型为: FILE ...
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- C语言文件读写操作
C语言实现文件读写,注意区分几个方法: 写入: fwrite() //个人认为这个最好,可是实现写入任何数据类型,任何长度 fputs() //写入一个字符串,字符串长度不能太长,具体的长度未知,但估 ...
- 实现动态的XML文件读写操作
实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...
- java文件读写操作类
借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...
- C语言对文件的操作函数用法详解2
fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const ...
- C语言对文件的操作函数用法详解1
在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...
- 实现动态的XML文件读写操作(依然带干货)
前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义好XML文件的格式就不太现实了,如何实现不管 ...
- python 基础-文件读写'r' 和 'rb'区别
原文链接: python基础-文件读写'r' 和 'rb'区别 一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r ...
随机推荐
- getting start with storm 翻译 第八章 part-1
转载请注明出处:http://blog.csdn.net/lonelytrooper/article/details/12434915 第八章 事务性Topologies 在Storm中,正如本书前边 ...
- msyql 字节问题
MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定).在 MySQL5.0以上的版本中,varchar数据 ...
- 隐式intent
使用隐式Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动, 这里我们首先指定了Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的 ...
- JavaScript使用需要注意的细节
1.JavaScript区分大小写 在JavaScript中对象,变量.函数都是区分大小写的,例如: Object表示对象,Arrary表示数组,而写成object,arrary的时候JavaScri ...
- 饿了么 ---Java面试
下午去饿了么参加面试,其实也满怀期待,毕竟也是个大公司. 交通:偏外环,真北路 环境:感觉压抑,不通风,面试人很多,可能是屋子高度低,不舒服. 填了资料,等待面试,两轮,真是憋屈 都是搞技术的,何苦为 ...
- Android Intent传递对象小结
效果: 想看实例的,感兴趣的能够看之前的一篇文章 Android ViewPager Fragment实现选项卡 部分关键代码: public class SerializeActivity exte ...
- hash定义
* 若结构中存在关键字和K相等的记录,则必定存储在f(K)的位置上.由此,不需比较便可直接取得所查记录.这个对应关系f称为 散列函数(Hash function),按这个思想建立的表为 散列表. * ...
- 使用EPEL和REMI第三方yum源
http://dl.fedoraproject.org/pub/epel/ epel-release-latest-.noarch.rpm redhat5 epel-release-latest-.n ...
- STL——静态常量整数成员在class内部直接初始化
如果class内含const static integral data member,那么根据C++标志规格,我们可以在class之内直接给予初值.所谓integral泛指所有的整数型别(包括浮点数) ...
- [转] weak_ptr解决shared_ptr环状引用所引起的内存泄漏
http://blog.csdn.net/liuzhi1218/article/details/6993135 循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引 ...