读书人

批量修改文件内容,该如何解决

发布时间: 2012-02-09 18:22:27 作者: rapoo

批量修改文件内容
某个文件夹下有几千个文件,现在需要完成如下事情:打开每个文件,看文件是否包含有 <!--include "config.asp "--> 如果有的话,在这个文件的最后加上 <%call closeconn()%> ,用C++来实现.
能不能给我点思路,我是新手,我想用代码来实现上面的事情.能不能和我说下大致思路.
我的思路是:
1.输入文件夹的位置
2.打开文件夹的第一个文件
3.判断文件里是否含有 <!--include "config.asp "-->
4.如果有的话则在最后加上 <%call closeconn()%> ,然后保存,关闭文件.没有的话不修改关闭该文件.
5.重复2到4的步骤.


我的问题是:如何实现定位到指定文件夹.如何一次一个地打开某个文件.如何实现2-4.用到C++提供的哪些功能???

[解决办法]
#include "stdafx.h "
#include <windows.h>

BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\ ", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}

void FindInAll(::LPCTSTR lpszPath)
{TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, "\\ ");
lstrcat(szFind, "*.* "); // 找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
return;

do
{
if (wfd.cFileName[0] == '. ')
continue; // 过滤这两个目录
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s ", lpszPath, wfd.cFileName);
else
wsprintf(szFile, "%s\\%s ", lpszPath, wfd.cFileName);
FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归
}
else
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s ", lpszPath, wfd.cFileName);
else
wsprintf(szFile, "%s\\%s ", lpszPath, wfd.cFileName);
printf( "%s\n ",szFile);
// 对文件进行操作
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // 关闭查找句柄

}
int main(int argc, char* argv[])
{
FindInAll( "e:\\result ");
return 0;
}
//结合网上资料写出的,作者--杨克群^_^

读书人网 >C++

热点推荐