1、fopen_s
描述:
打开文件。
定义:
errno_t fopen_s(FILE** stream, char const* fileName, char const* mode);
参数:
stream - 指向控制打开的文件流的对象的指针
filename - 要关联文件流到的文件名
mode - 确定文件访问模式
文件访问模式字符串 | 含义 | 解释 | 若文件已存在的行动 | 若文件不存在的行动 |
---|---|---|---|---|
“r” | 读 | 为读取打开文件 | 从起始读取 | 打开失败 |
“rb” | 以二进制模式读 | 为读取打开文件 | 从起始读取 | 打开失败 |
“w” | 写 | 为写入创建文件 | 销毁内容 | 创建新文件 |
“wb” | 以二进制模式写 | 为写入创建文件 | 销毁内容 | 创建新文件 |
“a” | 追加 | 追加到文件 | 写入到末尾 | 创建新文件 |
“r+” | 扩展读 | 为读取/写入打开文件 | 从起始读取 | 错误 |
“w+” | 扩展写 | 为读取/写入创建文件 | 销毁内容 | 创建新文件 |
“a+” | 扩展追加 | 为读取/写入打开文件 | 写入到末尾 | 创建新文件 |
返回值:
打开成功返回0,打开失败返回非0值。
2、fseek
描述:
设置流文件 stream 位置标识符的当前值。
定义:
int fseek(FILE *stream, long int offset, int whence)
参数:
stream - 指向控制打开的文件流的对象的指针
offset - 偏移量。整数表示正向偏移,负数表示负向偏移。
whence- 设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
常量 | 描述 |
---|---|
SEEK_SET | 文件的开头 |
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件的末尾 |
返回值:
如果成功,则该函数返回0,否则返回非0值。
3、ftell
描述:
获取指定流 stream 的当前文件位置。
定义:
long int ftell(FILE *stream)
参数:
stream - 指向控制打开的文件流的对象的指针
返回值:
返回位置标识符的当前值。如果发生错误,则返回 -1。
4、fread
描述:
读取文件数据。
函数定义:
size_t fread( void* buffer, size_t size, size_t count, std::FILE* stream );
参数:
buffer - 指向要读取的数组中首个对象的指针
size - 每个对象的字节大小
count - 要读取的对象数
stream - 读取来源的输入文件流
返回值:
返回成功读取的对象数,若出现错误或文件尾条件,则可能小于 count 。
5、fwrite
描述:
写入文件数据。
函数定义:
size_t fwrite( const void* buffer, size_t size, size_t count, FILE* stream );
参数:
buffer - 指向数组中要被写入的首个对象的指针
size - 每个对象的大小
count - 要被写入的对象数
stream - 指向输出流的指针
返回值:
返回成功写入的对象数,若错误发生则可能小于 count 。
6、fclose
描述:
关闭文件。
函数定义:
int fclose( FILE* stream );
参数:
stream - 要关闭的文件流
返回值:
成功时为 0 ,否则为 EOF 。
7、示例:读取文件数据
#include <iostream>
int main(int argc, char **argv)
{
//1、打开文件
FILE* pFile = nullptr;
int nRt = fopen_s(&pFile,"E:\\01-work\\temp\\微信图片.jpg", "rb");
if (nRt != 0)
{
std::cout << "打开文件失败" << std::endl;
return -1;
}
//2、获取文件大小
fseek(pFile,0,SEEK_END);
int nFileSize = ftell(pFile);
fseek(pFile,0,SEEK_SET);
char* pBuf = new char[nFileSize];
memset(pBuf,0,nFileSize);
//3、读取文件数据
int nDataSize = fread(pBuf,sizeof(char),nFileSize,pFile);
if (nDataSize < nFileSize)
{
fclose(pFile);
delete pBuf;
std::cout << "读取文件失败" << std::endl;
return -1;
}
//4、关闭文件
fclose(pFile);
delete pBuf;
std::cout << "读取文件成功" << std::endl;
return 0;
}
8、示例:写入文件数据
#include <iostream>
int main(int argc, char **argv)
{
int nFileSize = 1024; //文件大小
char* pBuf = new char[nFileSize];
memset(pBuf, 1, nFileSize);
//1、打开文件
FILE* pFile = nullptr;
int nRt = fopen_s(&pFile,"E:\\01-work\\temp\\test.txt", "wb");
if (nRt != 0)
{
std::cout << "打开文件失败" << std::endl;
return -1;
}
//2、写入文件数据
int nDataSize = fwrite(pBuf,sizeof(char),nFileSize,pFile);
if (nDataSize < nFileSize)
{
fclose(pFile);
delete pBuf;
std::cout << "写入文件失败" << std::endl;
return -1;
}
//3、关闭文件
fclose(pFile);
delete pBuf;
std::cout << "写入文件成功" << std::endl;
return 0;
}