FILE 文件指针
fopen_s/_wfopen_s: 打开文件
fclose: 关闭文件
fread: 读取
fwrite: 写入
打开:
errno_t fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);
pFile: FILE指针的地址
filename: 文件路径
mode: 打开模式
"r" : 打开一个存在的文件, 如果不存在,则返回失败
"w": 打开一个文件, 如果不存在则创建, 存在则清空内容
"a": 打开一个文件并将文件指针指向文件末尾, 文件不存在将创建文件
"r+": 打开一个文件用于读/写, 文件必须存在.
"w+": 打开一个文件用于写/读,文件不存在则创建
"a+": 打开一个文件用于读/追加, 文 件不存在则创建.
"b": 以二进制读/写文件, 如"rb", 'wb"
返回值:
0: 成功,否则就失败
读取:
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
buffer: 缓冲区指针
size: 缓冲区单位大小,单位为字节
count: 最大读取个数
stream: 文件指针
实际最大读取的字节数为:size * count个
返回值:
实际读取的个数,可能会比count小,使用feof测试是否已经到达了文件末尾,发生错误, 返回0/EINVAL
写入:
size_t fwrite(
const void *buffer,
size_t size,
size_t count,
FILE *stream
);
buffer: 缓冲区地址
size: 缓冲区单位大小,单位为字节
count: 最大写入个数
stream: 文件指针
返回值:
实际写入的个数,如果比count小, 可能buffer数组越界, 发生错误, 返回0/EINVAL
测试代码:
void TestFile()
{
FILE *pFile;
fopen_s(&pFile, "test.txt", "wb");
if (NULL == pFile)
{
cout << "创建/打开文件失败!" << endl;
return;
}
char buffer[10] = "string";
int nByteWriten = fwrite(buffer, 1, strlen(buffer), pFile);
cout << "成功写入" << nByteWriten << "个字节" << endl;
fclose(pFile);
char rdBuffer[10] = {0};
fopen_s(&pFile, "test.txt", "rb");
if (NULL == pFile)
{
cout << "打开文件失败!" << endl;
return;
}
int nByteRead = fread(rdBuffer, 1, 10, pFile);
cout << "成功读取" << nByteRead << "个字节: ";
cout << rdBuffer << endl;
fclose(pFile);
}
运行结果: