您的位置:首页 > 编程语言 > C语言/C++

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

读写文件

fread
and
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:文件句柄

在文件中定位指针位置

fseek
and
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()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: