c/c++ 文件操作相关的常用函数
2016-01-17 14:39
531 查看
文件操作相关的常用函数
标签:c/c++删除文件
DeleteFile
BOOL DeleteFile( LPCTSTR lpFileName // 文件名指针 );
功能说明
删除一个存在的文件
返回值
如果成功返回一个非0值
失败返回0,可以用GetLastError函数得到错误信息
如果程序尝试删除一个不存在的文件。GetLastError返回ERROR_FILE_NOT_FOUND。如果文件是只读 的,则GetLastError返回ERROR_ACCESS_DENIED
读写文件
freadand
fwrite
#include <stdio.h> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
返回值
读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录数小于nmemb,也可能返回0。
参数
fread和fwrite用于读写记录,这里的记录的单位是字节(一串固定长度的字节),比如一个int、一个结构体或者一个定长数组,size对应的就是这些数据结构的长度(多少字节的长度),只是取1的情况更多一些。而nmemb指出要读或写多少条记录,这些记录会在ptr所指的内存空间中连续存放,共占size * nmemb个字节。
功能
fread从文件stream中读出size * nmemb个字节保存到ptr中;而fwrite把ptr中的size *nmemb个字节写到文件stream中。
【需要注意】fwrite和fread函数中的
FILE *stream参数,在一次操作的过程中,是具有连续性的,即下一次读取或者写入的操作是在上一次操作的基础上进行的。
举例
将一个字符串写入文件
char *str = "hello,I am a test program!"; fwrite(str, sizeof(char), strlen(str), fp)
将一个字符数组写入文件
char str[] = {'a','b','c','d','e'}; fwrite(str, sizeof(char), sizeof(str), fp)
将一个整型数组写入文件
int a[] = {12,33,23,24,12}; fwrite(a, sizeof(int), nmemb, fp)
对于先计算数组元素个数nmemb,之后再进行后续的操作,注意
sizeof(int)。
fread_s函数
size_t fread_s( void *buffer, size_t bufferSize, size_t elementSize, size_t count, FILE *stream );
该函数只是运用在vs下的相对fread函数来说更安全的函数。
参数
buffer:存储数据的缓冲区
bufferSize:存储数据的缓冲区的大小
elementSize:读取对象的字节大小(一般取1,其他的情况可能是sizeof(int)或sizeof(structName)等等)
count:要读取的对象的最大数量
stream:文件句柄
在文件中定位指针位置
fseekand
lseek
fseek
int fseek(FILE *stream, long offset, int fromwhere);
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2。
举例如下:
fseek(fp,100L,0);把文件内部指针(即fd)移动到离文件开头100字节处;
fseek(fp,100L,1);把文件内部指针(即fd)移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把文件内部指针(即fd)退回到离文件结尾100字节处。
lseek
相对于fseek基本是一样的,只是返回值不同,lseek返回的是一个off_t的数值,即文件内部指针相对于文件开头的偏移量。
得到文件位置指针当前位置相对于文件首的偏移字节数
ftell
long ftell(FILE *stream);
【注意】因为ftell返回long型,根据long型的取值范围-231~231-1(-2147483648~2147483647),故对大于2.1G的文件进行操作时出错。
【注意】
ftell(fp);利用函数 ftell() 也能方便地知道一个文件的长。如以下语句序列:
fseek(fp, 0L,SEEK_END); len =ftell(fp);
首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。
相关文章推荐
- C语言实现银行家算法
- C语言的atan()和atan2()函数
- C++小题(十五)
- C语言-纸牌计算24点小游戏
- C++ 学习笔记(一些新特性总结 2)
- C++ 学习笔记(一些新特性总结 2)
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型
- 【LeetCode-258】Add Digits(C++)
- C++模板
- Accelerated C++ 习题答案
- C语言中控制printf的打印颜色实例及vt100的控制符文档-转
- 使用C语言计算utf-8字符串长度 和取子字符串-转
- C语言中怎么将变量名转换为字符串 -转
- C/C++ 远程开发 - NetBeans IDE 教程 -转
- C语言模拟按键
- ARM环境中的c语言socket进程通信-转
- thrift框架使用C++
- c语言定义变量的位置(By 紫贝殼)
- constexpr与常量表达式(c++11标准)