标签:异常 一起 string file span cfile 问题 ... 长度
昨天使用Open是因为不熟悉mode而浪费了时间,所以这里记录一下。
需求是文件如果存在则直接打开,文件如果不存在则新建。
一开始直接这样写的:
CString strPath, strReadLine; TCHAR PathPro[256] = {0}; GetCurrentDirectoryW(256,PathPro); //PathPro :current path strPath = CString(PathPro)+_T("\\") + FileName; //strPath :absolute path CStdioFile cfile; cfile.Open(strPath,CFile::modeCreate|CFile::modeReadWrite); while(cfile.ReadString(strReadLine)) { ... }
效果是文件如果存在则直接清空,后来又认真看了一下每种mode的用法。
modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。
modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作。
modeReadWrite:以读写方式打开文件。
modeRead:只读。
modeWrite:只写。
换成这种方式打开就不会有问题了。
cfile.Open(strPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
实现效果是文件如果不存在则新建,如果存在则不清空文件以读写方式打开。
使用 CFile 的子类 CStdioFile 的注意事项 2
标签:异常 一起 string file span cfile 问题 ... 长度
原文地址:https://www.cnblogs.com/JanSN/p/9901252.html