C文件操作1:如何写入读取?fopen的6种组合参数怎么用? |
您所在的位置:网站首页 › 早读打卡语录怎么写 › C文件操作1:如何写入读取?fopen的6种组合参数怎么用? |
C语言中文件操作,即文件打开,文件写入、文件读取、文件关闭等。 在使用这些功能时,需要了解其基本的使用规则,如: 文件读写前,必须先使用fopen函数打开文件。 使用fopen打开时,还要指明文件的打开的参数,是要读呢还是写呢?这些参数如果不注意,比如直接使用"w"参数打开一个已存在的文件,则里面的内容会先被清空,如果还想要之前的文件中的内容,那也已经被清空了! 文件操作基础函数 fopen若要对文件进行读写操作,第一步需要使用fopen()函数 fopen()函数用于打开指定路径的文件,获取指向该文件的指针 函数原型: /** @func: fopen * @brief: 打开文件 * @para: [path]:文件路径,如:"E:\Test\test.txt" * [mode]:文件打开方式(r w a r+ w+ a+ rb wb ab ...具体见下面表格) * @return:文件打开成功,则指向该流的文件指针就会被返回 * 文件打开失败,则返回NULL,并把错误代码存在errno中 */ FILE * fopen(const char * path,const char * mode);fopen打开方式的参数 打开文件的参数,一共6种符号,包括2部分,第1部分的指定读还是写(r\w\a),第2部分指定是对第1部分的补充(t/b/+) 参数第1部分(r\w\a) 第1部分字符含义解释rread只读(打开文件),文件必须存在wwrite只写(创建文件),文件若已存在,则文件会先被清空aappend末尾追加写入,文件若不存在,则先创建 参数第2部分(t\b\+) | 第2部分字符 | 含义 | 解释 | | ----------- | ---------- | -------------------- | | t | text | 读写文本文件 | | b | binary | 读写二进制文件 | | + | read/write | 即能读也能写 |注意: 参数第1部分的必须要有的,第2部分可以省略,但省略后,会有其默认的含义 未指明是读文本还是二进制,则默认为读文本文件 默认规则: "r" = "rt", 因为默认打开text "w" = "wt", 因为默认打开text "a" = "at", 因为默认打开text "r+" = "rt+", 因为默认打开text "w+" = "wt+", 因为默认打开text "a+" = "at+", 因为默认打开text思考: 疑问1:r+与w+的作用有区别吗?r表示读,w表示写,都补充一个+,表示既能读也能写,看起来作用好像是一样 但,区别就在于第1部分的r与w,一个是文件必须存在,一个是不存在则会先创建 疑问2:w与w+的作用有区别吗?a与a+的作用有区别吗?w表示擦除写入,a表示追加写入,都补充一个+,赋予它们读的功能 w和a既然都能写了,还不能读吗,还要添加一个+才能读?是的! fread函数原型: /** @func: fread * @brief: 从文件读取 * @para: [buffer]:指向数据块的指针 * [size]:每个数据的大小,单位为Byte(例如:sizeof(int)就是4) * [count]:数据个数 * [stream]:文件指针,如fp * @return:实际读取的个数 */ size_t fread(void *buffer, size_t size, size_t count, FILE *stream);fread的返回值随着调用格式的不同而不同: 调用格式1:fread(buf,sizeof(buf),1,fp);,将整个buf数据作为1个数据读取,则读取的个数是1 读取成功返回值为1 调用格式2:fread(buf,1,sizeof(buf),fp);,将1Byte作为1个数据读取,则读取个数是sizeof(buf) 读取成功返回实际写入的数据个数(单位为Byte) fwritefwrite()函数用于将内存区域中的数据写入到本地文本 函数原型: /** @func: fwrite * @brief: 向文件写入 * @para: [buffer]:指向数据块的指针 * [size]:每个数据的大小,单位为Byte(例如:sizeof(int)就是4) * [count]:数据个数 * [stream]:文件指针,如fp * @return:实际写入的个数 */ size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);fwrite的返回值随着调用格式的不同而不同: 调用格式1:fwrite(buf,sizeof(buf),1,fp);,将整个buf数据作为1个数据写入,则写入个数是1 成功写入返回值为1 调用格式2:fwrite(buf,1,sizeof(buf),fp);,将1Byte作为1个数据写入,则写入个数是sizeof(buf) 成功写入则返回实际写入的数据个数(单位为Byte) fclose写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。 函数原型: /** @func: fclose * @brief: 关闭文件 * @para: [stream]:文件指针,如fp * @return:关闭成功返回0,关闭失败返回EOF */ int fclose( FILE *stream ); 使用示例 基础示例 打开&写入小技巧: 用malloc函数申请区域时是申请的一片char*区域,通过强制类型转换后可装任意类型数据 #include #include #define DATA_SIZE 100 int main() { unsigned char *pRawData = NULL; int *pData = NULL; /*使用malloc申请一块内存*/ pRawData = (unsigned char *)malloc(sizeof(int) * DATA_SIZE); /*将该块内存强制转换为unsigned int*/ pData = (int *) pRawData; /*对该块内存进行赋值 */ int i = 0; for(i=0; i |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |