文件操作相关的常用函数
标签:c/c++
删除文件
DeleteFile
BOOL DeleteFile( LPCTSTR lpFileName // 文件名指针 );
功能说明
删除一个存在的文件返回值
- 如果成功返回一个非0值
- 失败返回0,可以用GetLastError函数得到错误信息
如果程序尝试删除一个不存在的文件。GetLastError返回ERROR_FILE_NOT_FOUND。如果文件是只读 的,则GetLastError返回ERROR_ACCESS_DENIED
读写文件
fread
andfwrite
#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:文件句柄
- 参数
在文件中定位指针位置
fseek
andlseek
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()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。