C++关于文件的常用操作
PS:也是从网上各个帖子中学习的代码,因此代码的格式以及内容有粘贴网上其他大神的代码,如有侵权请告知删除
- 检索指定目录中,是否有指定文件,如果有则删除
void Check_File_Exist(CStringA FilePath, CStringA EquipID, CStringA LotID)
{
_finddata_t FileInfo;
CStringA Files = FilePath + "\\*";
long handle = _findfirst(Files, &FileInfo);
if (handle == -1L)
{
MessageBox(NULL, "没有找到Request文档路径", "确认", MB_SYSTEMMODAL | MB_OK);
}
else
{
do{
//此句看到很多前辈说很重要,实际测试后,会发现遍历的文件名字中的确有.和..的出现,需要屏蔽
if ((strcmp(FileInfo.name, ".") != 0) && (strcmp(FileInfo.name, "..") != 0))
{
if (strstr(FileInfo.name, EquipID) != NULL && strstr(FileInfo.name, LotID) != NULL)
{
remove(FilePath + "\\" + FileInfo.name);
}
}
} while (_findnext(handle, &FileInfo) == 0);
_findclose(handle);
}
}
- 在目标目录中找到文件,并分析其内容(CSV文件)。例子中只适用与两行内容的文件,第一行为顶栏,第二行为对应数值,汇总后存入Map容器
如:
姓名 性别 年龄
王二 男 12
BOOL Check_ReplyFile_Content(CStringA FilePath, int LotID_Index)
{
_finddata_t FileInfo;
CStringA Files = FilePath + "\\*";
long handle = _findfirst(Files, &FileInfo);
map < string, string > lst_ReplyFile_Content;//汇总合并文件中的信息
if (handle == -1L)
{
MessageBox(NULL, "没有找到文档路径", "确认", MB_SYSTEMMODAL|MB_OK);
}
else
{
do{
if ((strcmp(FileInfo.name, ".") != 0) && (strcmp(FileInfo.name, "..") != 0))
{
//找到目标文件
if (strstr(FileInfo.name, "EQUIP") != NULL && strstr(FileInfo.name, "LOTID") != NULL)
{
CStringA ReplyFilePath = FilePath + "\\" + FileInfo.name;
ifstream ReplyFile(ReplyFilePath, ios::in);
string LineContent;
istringstream FileContent;
vector<string> values;//用来存放值
vector<string> items;//用来存放顶栏
string word;
if (!ReplyFile.is_open())
{
MessageBox(NULL, "Reply文件打开失败", "确认", MB_SYSTEMMODAL | MB_OK);
break;
}
else
{
int times = 0;//第一次读顶栏,第二次读值
//读取数据
while (getline(ReplyFile, LineContent))
{
FileContent.clear();
FileContent.str(LineContent);
while (getline(FileContent, word, ','))
{
if (0 == times)
{
items.push_back(word);
}
else
{
values.push_back(word);
}
}
times++;
}
ReplyFile.close();
//将items和words赋值给map,以方便读取
for (int i = 0; i < sizeof(values); ++i)
{
lst_ReplyFile_Content.insert(pair<string, string >(items[i], values[i]));
}
}
}
}
} while (_findnext(handle, &FileInfo) == 0);
_findclose(handle);
}
return TRUE;
}
- 向指定目录生成文件。
void Write_File(string FilePath)
{
if (MakeSureDirectoryPathExists(FilePath))
{
::CreateDirectory(FilePath, NULL);
}
FILE *WriteFile;
if ((WriteFile= fopen(FilePath+ "\\Test.csv", "w")) == NULL)
{
MessageBox(NULL, "没有找到文档路径", "确认", MB_SYSTEMMODAL|MB_OK);
}
fprintf(WriteFile, "LotID,EPID,OPID,StartTime,EQStatus\n");
fclose(WriteFile);
}