能否帮看看错在哪里,,我只在后面加两句就错了呵呵。。这样能实现对data文件夹里的ini文件的遍历吗
void CazaoWnd::Load(LPTSTR strDataDir)
{
//m_NoteItems.clear();
CMzString tmpDataDir = strDataDir;
//检查Data文件夹是否存在,不存在则创建
if (DirectoryExists(tmpDataDir))
{
/*typedef struct _WIN32_FIND_DATAW {
DWORD dwFileAttributes;//属性
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwOID;
WCHAR cFileName[ MAX_PATH ]*/
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
/*功能说明
该函数到一个文件夹(包括子文件夹)去搜索指定文件 如果要使用附加属性去搜索文件的话 可以使用FindFirstFileEx函数
[编辑本段]
参数说明
返回值 HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件
// file nameLong,如执行成功,返回一个搜索句柄。如果出错,返回一个INVALID_HANDLE_VALUE常数,一旦不再需要,应该用FindClose函数关闭这个句柄
LPCTSTR lpFileName,欲搜索的文件名。可包含通配符,并可包含一个路径或相对路径名 *.* 表示所有文件
LPWIN32_FIND_DATA lpFindFileData 指向一个用于保存文件信息的结构体
*/
hFind = FindFirstFile(tmpDataDir + L"*.*", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
return;
}
else
{
NoteItem noteItem;
do
{//. 和 ..是Windows为了兼容Dos,分别指根目录和父目录,比如在DOS中输入 "cd .."就会回到上一层目录。
//所以在显示目录结构时不需要显示这两个,所以要就过滤掉
//跳过'.''..' do…while语句:用于首先执行一次循环体语句,然后开始测试循环条件,当条件为‘真’时继续循环的处理过程。语句格式:
if (FindFileData.cFileName[0] == '.')
continue;//继续 continue语句会造成当前循环结束,并立即开始下一次循环(在对布尔表达式进行重新求值之后)。
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//文件属性 :目录
{
//遍历子文件夹
}
else
{
//找到一个文件
if (CreateNoteItem(tmpDataDir + FindFileData.cFileName, noteItem))
{
//m_NoteItems.push_back(noteItem); // insert element at end
CMzStringW Str2 =noteItem.cTitle+noteItem.cNoteContext;
CMzStringW Str1=m_Title.GetText();//得到标题栏的输入的查找单词,拿来与ini里的比对。。
int a;
a=Str1.Compare ( Str2 );
if (a<=0){
m_Context.SetText(Str2);
}
else MzMessageBoxEx(m_hWnd,L"搜索为空", L"警告");
}
}
}
while (FindNextFile(hFind,&FindFileData));
}
FindClose(hFind);//关闭句柄
}
}