1、fopen_s、_wfopen_s
描述:
打开文件。
函数定义:
errno_t fopen_s(FILE** stream, char const* fileName, char const* mode);
errno_t _wfopen_s(FILE** stream, wchar_t const* fileName, wchar_t const* mode);
参数:
stream - 指向控制打开的文件流的对象的指针
filename - 要关联文件流到的文件名
mode - 确定文件访问模式
文件访问模式字符串 | 含义 | 解释 | 若文件已存在的行动 | 若文件不存在的行动 |
---|---|---|---|---|
“r” | 读 | 为读取打开文件 | 从起始读取 | 打开失败 |
“rb” | 以二进制模式读 | 为读取打开文件 | 从起始读取 | 打开失败 |
“w” | 写 | 为写入创建文件 | 销毁内容 | 创建新文件 |
“wb” | 以二进制模式写 | 为写入创建文件 | 销毁内容 | 创建新文件 |
“a” | 追加 | 追加到文件 | 写入到末尾 | 创建新文件 |
“r+” | 扩展读 | 为读取/写入打开文件 | 从起始读取 | 错误 |
“r+” | 扩展写 | 为读取/写入创建文件 | 销毁内容 | 创建新文件 |
“a+” | 扩展追加 | 为读取/写入打开文件 | 写入到末尾 | 创建新文件 |
返回值:
打开失败返回0,否则返回1。
2、std::fread
描述:
读取数据。
函数定义:
std::size_t fread( void* buffer, std::size_t size, std::size_t count, std::FILE* stream );
参数:
buffer - 指向要读取的数组中首个对象的指针
size - 每个对象的字节大小
count - 要读取的对象数
stream - 读取来源的输入文件流
返回值:
返回成功读取的对象数,若出现错误或文件尾条件,则可能小于 count 。
3、std::write
描述:
写入数据。
函数定义:
std::size_t fwrite( const void* buffer, std::size_t size, std::size_t count, std::FILE* stream );
参数:
buffer - 指向数组中要被写入的首个对象的指针
size - 每个对象的大小
count - 要被写入的对象数
stream - 指向输出流的指针
返回值:
返回成功写入的对象数,若错误发生则可能小于 count 。
4、std::fclose
描述:
关闭文件。
函数定义:
int fclose( std::FILE* stream );
参数:
stream - 要关闭的文件流
返回值:
成功时为 0 ,否则为 EOF 。
5、示例
int main()
{
std::size_t unSumData = 1020;//每次读写文件元素的大小
std::size_t unOneData = 0; //每次读出或写入的元素大小
char* pData = new char[unSumData];
std::memset(pData, 0, unSumData);
std::FILE* pFileSourve = nullptr; //源文件指针
std::FILE* pFileTarget = nullptr; //目标文件指针
//打开文件
errno_t nErr = fopen_s(&pFileSourve, "E:\\temporary\\老杨.jpeg", "rb");
if (nErr != 0)
{
std::cout << "打开文件失败" << std::endl;
return -1;
}
nErr = fopen_s(&pFileTarget, "E:\\temporary\\老杨2.jpeg", "wb");
if (nErr != 0)
{
std::fclose(pFileSourve);
std::cout << "创建文件失败" << std::endl;
return -1;
}
//读取文件和写入文件
while ((unOneData = std::fread(pData,1, unSumData,pFileSourve)) > 0)//读取数据
{
std::fwrite(pData, 1, unOneData, pFileTarget);//写入数据
std::memset(pData,0, unSumData);
}
//关闭文件
std::fclose(pFileSourve);
std::fclose(pFileTarget);
delete[] pData;
std::cout << "拷贝成功" << std::endl;
}