我想做一个特定文件的更名器(源于.rmvb的电影改为.rm就可以用金山影霸播放)。用CFileFind做,加上递归。但是会循环两次的,各位看看:
Recurse(LPCTSTR pstr, int flag)
{
CFileFind finder;
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
{ continue; }
if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
Recurse(str,flag);
}
else
{
CString str=finder.GetFilePath();
CString stt=str+".bak";
CFile::Rename(str,stt);
}
}
finder.Close();
}不用Rename()函数就只是遍历一次,现在这段函数的的结果就是变成*.rmvb.bak.bak了,不知道为什么。
Recurse(LPCTSTR pstr, int flag)
{
CFileFind finder;
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
{ continue; }
if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
Recurse(str,flag);
}
else
{
CString str=finder.GetFilePath();
CString stt=str+".bak";
CFile::Rename(str,stt);
}
}
finder.Close();
}不用Rename()函数就只是遍历一次,现在这段函数的的结果就是变成*.rmvb.bak.bak了,不知道为什么。
解决方案 »
- private: System::Windows::Forms::Button^ button1; 请问这个^是什么个意思???谢谢啦!
- 学习文件过滤驱动(ifs ddk)终于小有心得,散分200,庆祝一下
- 继续讨论,上次已经按时结贴了!已经实现了文件数据销毁的功能了,但是有个问题,文件名无法销毁,用数据恢复工具可以恢复文件名,如果文
- 帮帮我啊!!!!!!!帮帮我啊!!!!!!!帮帮我啊!!!!!!!帮帮我啊!!!!!!!
- 一个有关打印预览的问题
- 一个有关LoadImage的小问题,请指教
- teechart
- 初学windows编程,当linking一个源程序时遇到了几个搞不懂的错误
- 谁帮我翻译几个名词!!!100分,急用!!!
- 如何使在子线程下创建的定时器在该线程结束后还有效。(应用场合:类似于在辅助扫描线程里发现某些问题后开始报警的应用) 3Q!!!!
- 请问路由机制与代理机制的数据报格式有什么不同 ?
- 超级简单问题,超级变态。谁帮忙解决一下。关于CString的Format用法
CString stt=str+".bak";
CFile::Rename(str,stt);
把上述代码改为
CString str=finder.GetFilePath();
CString stt=str;
stt.Replace ("rmvb","bak");//这边是要改的后缀名的变更
CFile::Rename(str,stt);
没有任何问题啊. 该目录下的所有文件屁股上都多了个.BAK, 如果要去掉后缀改用你要选用的后缀, 递归还要修改一下,然后去掉最后屁股后面的后缀,把你的加入就可以了.
按照我的预想,所有文件的后缀都将由*.*变为*.*.bak的
但是现在我运行得到的效果变成了*.*.bak.bak了。
我的程序是一个窗口模式的,先是从一个目录选择窗口得到要改名的目录,选定改名规则(就是flag的用处,现在没有用到),按确定就调用Recurse(LPCTSTR pstr, int flag)。
结果就会出现上述问题。
你可以跳过文件扩展名是.bak的文件。