1.网上有很多关于文件的操作的原型,主要的有以下:
函数 说明
ExpandFileName() 返回文件的全路径(含驱动器、路径)
ExtractFileExt() 从文件名中抽取扩展名
ExtractFileName() 从文件名中抽取不含路径的文件名
ExtractFilePath() 从文件名中抽取路径名
ExtractFileDir() 从文件名中抽取目录名
ExtractFileDrive() 从文件名中抽取驱动器名
ChangeFileExt() 改变文件的扩展名
ExpandUNCFileName() 返回含有网络驱动器的文件全路径
ExtractRelativePath() 从文件名中抽取相对路径信息
ExtractShortPathName() 把文件名转化为DOS的8·3格式
MatchesMask() 检查文件是否与指定的文件名格式匹配
2.由于以上的没有直接满足目前的需求,于是结合以上的函数,自己写了一下函数的实现。
1)void BackFold(AnsiString fileName,AnsiString fileFold);//Source filePath,target filePath
//这是备份文件后删除原文件
{
SHFILEOPSTRUCT op;
String strFrom = fileName+"\0", strTo = fileFold+"\0";
op.hwnd = NULL;
op.wFunc = FO_MOVE; // FO_MOVE:移动, FO_COPY:拷贝, FO_DELETE:删除, FO_RENAME:更名
op.pFrom = strFrom.c_str();
op.pTo = strTo.c_str();
op.fFlags = FOF_WANTNUKEWARNING; // FOF_ALLOWUNDO:删除文件到回收站
::SHFileOperation(&op);
}
2)从路径 //D:/file/2010.txt return file这个倒数二级文件路径名
AnsiString city(AnsiString fileName);
{
AnsiString fold;
AnsiString str = ExtractFileDir(fileName);
g_logFile.print("%s\n",str);
fold=ExtractFileName(str);
g_logFile.print("%s\n",fold);
return fold;
}
3)改变文件的后缀名,返回文件的名称
AnsiString fileOfName(AnsiString fileName,int Flag);//0-need change,1-change for vox Result: 2010.txt or 2010.vox
{
AnsiString name,str;
if(Flag==0)
{
str = ExtractFileName(fileName);
g_logFile.print("%s\n",str); // 2012.txt
}
else
{
name=ChangeFileExt(fileName,".vox") ;
str= ExtractFileName(name);
g_logFile.print("%s\n",str); //2012.vox
}
return str;
}