比如。我要找到 腾讯QQ.lnk 这个快捷方式文件
给出一个路径"C:\Documents and Settings"
则遍历里面所有的文件和文件夹找到 腾讯QQ.lnk 并返回他所在的完整路径"C:\Documents and Settings\Administrator\桌面\腾讯QQ.lnk"
PS:
其实我是想用这个路径来找QQ.exe的安装路径的,只要我有腾讯QQ.lnk的完整路径就行了,但是我不会遍历文件夹,,饿。。
9 个解决方案
#1
CFileFind
http://www.yesky.com/20010704/187879.shtml
http://www.yesky.com/20010704/187879.shtml
#2
CFileFind类FindFile/FileNextFile();
void Recurse(LPCTSTR pstr, CString& strText)
{
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd
// recur infinitely!
if (finder.IsDots())
continue;
// if it's a directory, recursively search it
CString str = finder.GetFilePath();
if (finder.IsDirectory())
{
Recurse(str, strText);
}
else
{
strText += str + _T("\r\n");
}
}
finder.Close();
}
// 调用
CString strText(_T(""));
Recurse(_T("F:\\MyProjects"), strText);
AfxMessageBox(strText);
#3
void FindFile(CString strPath)
{
CString strTemp;
CFileFind fileFinder;
BOOL bIsFinded = fileFinder.FindFile(strPath+_T("\\*.*"));
while (bIsFinded)
{
bIsFinded = fileFinder.FindNextFile();
if(!fileFinder.IsDots())
{
strTemp = fileFinder.GetFilePath();
if(fileFinder.IsDirectory())
FindFile(strTemp);
else
{
if(!strcmp(strTemp.Right(strTemp.GetLength()-strTemp.ReverseFind('\\')-1),"腾讯QQ.lnk"))
m_strFilesSrc.Add(strTemp);
}
}
}
fileFinder.Close();
}
记得在头文件中定义:
CStringArray m_strFilesSrc;
查找的时候:
FindFile("C:\\Documents and Settings");
m_strFilesSrc数组里面存放的就是C:\Documents and Settings文件夹下所有的快捷方式名为“腾讯QQ.lnk”的文件路径
#4
两个API
FindFirstFile
FindNextFile
关闭查找到的文件句柄要用FindClose而不是CloseHandle
FindFirstFile
FindNextFile
关闭查找到的文件句柄要用FindClose而不是CloseHandle
#5
哥哥这个数组怎么用啊,,怎么输出呢?
我用printf("%s",m_strFilesSrc)输出的是乱码。。。
我得到这个路径后要传给这个参数LPWSTR lpwLnkFile,好像类型也不匹配啊。。。我真的不太懂。。多帮下
#6
帮帮忙啊~~~~~~
#7
for(int i=0; i<m_strFilesSrc.GetSize(); i++)
{
AfxMessageBox(m_strFilesSrc[i]);
}
{
AfxMessageBox(m_strFilesSrc[i]);
}
#8
没有注意细节啊你?? C:\Documents and Settings\Administrator\桌面\腾讯QQ.lnk"
开始你给出 C:\Documents and Settings
然后你应该在 C:\\Documents and Settings\\*.* 下搜索 如果搜不到 那么就要得到其下的文件夹路径
比如C:\Documents and Settings\Administrator\
之后你应该在C:\Documents and Settings\Administrator\这个CString中 把它补成C:\\Documents and Settings\\Administrator\\*.*继续搜索
重复、、、、
关键是得到路径后 要补成搜索时的合法路径
开始你给出 C:\Documents and Settings
然后你应该在 C:\\Documents and Settings\\*.* 下搜索 如果搜不到 那么就要得到其下的文件夹路径
比如C:\Documents and Settings\Administrator\
之后你应该在C:\Documents and Settings\Administrator\这个CString中 把它补成C:\\Documents and Settings\\Administrator\\*.*继续搜索
重复、、、、
关键是得到路径后 要补成搜索时的合法路径
#9
大神。。这里还有个帖子。问题是一样的
http://topic.csdn.net/u/20110513/06/8a12bf39-a504-40b5-a1de-92e91179cf36.html
麻烦回复下。我把分给你。
好人做到底 送佛送到西
看看这个帖子。。
http://topic.csdn.net/u/20110514/01/36b97fea-2d11-42ff-a76c-52297b28b11a.html
我已经很努力的用最简洁的语言说明问题
并且已经把版面排好了,不会看着头昏的。麻烦抽空看下。
上面代码遗留下来的问题。希望能解决。。谢谢!
#1
CFileFind
http://www.yesky.com/20010704/187879.shtml
http://www.yesky.com/20010704/187879.shtml
#2
CFileFind类FindFile/FileNextFile();
void Recurse(LPCTSTR pstr, CString& strText)
{
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd
// recur infinitely!
if (finder.IsDots())
continue;
// if it's a directory, recursively search it
CString str = finder.GetFilePath();
if (finder.IsDirectory())
{
Recurse(str, strText);
}
else
{
strText += str + _T("\r\n");
}
}
finder.Close();
}
// 调用
CString strText(_T(""));
Recurse(_T("F:\\MyProjects"), strText);
AfxMessageBox(strText);
#3
void FindFile(CString strPath)
{
CString strTemp;
CFileFind fileFinder;
BOOL bIsFinded = fileFinder.FindFile(strPath+_T("\\*.*"));
while (bIsFinded)
{
bIsFinded = fileFinder.FindNextFile();
if(!fileFinder.IsDots())
{
strTemp = fileFinder.GetFilePath();
if(fileFinder.IsDirectory())
FindFile(strTemp);
else
{
if(!strcmp(strTemp.Right(strTemp.GetLength()-strTemp.ReverseFind('\\')-1),"腾讯QQ.lnk"))
m_strFilesSrc.Add(strTemp);
}
}
}
fileFinder.Close();
}
记得在头文件中定义:
CStringArray m_strFilesSrc;
查找的时候:
FindFile("C:\\Documents and Settings");
m_strFilesSrc数组里面存放的就是C:\Documents and Settings文件夹下所有的快捷方式名为“腾讯QQ.lnk”的文件路径
#4
两个API
FindFirstFile
FindNextFile
关闭查找到的文件句柄要用FindClose而不是CloseHandle
FindFirstFile
FindNextFile
关闭查找到的文件句柄要用FindClose而不是CloseHandle
#5
哥哥这个数组怎么用啊,,怎么输出呢?
我用printf("%s",m_strFilesSrc)输出的是乱码。。。
我得到这个路径后要传给这个参数LPWSTR lpwLnkFile,好像类型也不匹配啊。。。我真的不太懂。。多帮下
#6
帮帮忙啊~~~~~~
#7
for(int i=0; i<m_strFilesSrc.GetSize(); i++)
{
AfxMessageBox(m_strFilesSrc[i]);
}
{
AfxMessageBox(m_strFilesSrc[i]);
}
#8
没有注意细节啊你?? C:\Documents and Settings\Administrator\桌面\腾讯QQ.lnk"
开始你给出 C:\Documents and Settings
然后你应该在 C:\\Documents and Settings\\*.* 下搜索 如果搜不到 那么就要得到其下的文件夹路径
比如C:\Documents and Settings\Administrator\
之后你应该在C:\Documents and Settings\Administrator\这个CString中 把它补成C:\\Documents and Settings\\Administrator\\*.*继续搜索
重复、、、、
关键是得到路径后 要补成搜索时的合法路径
开始你给出 C:\Documents and Settings
然后你应该在 C:\\Documents and Settings\\*.* 下搜索 如果搜不到 那么就要得到其下的文件夹路径
比如C:\Documents and Settings\Administrator\
之后你应该在C:\Documents and Settings\Administrator\这个CString中 把它补成C:\\Documents and Settings\\Administrator\\*.*继续搜索
重复、、、、
关键是得到路径后 要补成搜索时的合法路径
#9
大神。。这里还有个帖子。问题是一样的
http://topic.csdn.net/u/20110513/06/8a12bf39-a504-40b5-a1de-92e91179cf36.html
麻烦回复下。我把分给你。
好人做到底 送佛送到西
看看这个帖子。。
http://topic.csdn.net/u/20110514/01/36b97fea-2d11-42ff-a76c-52297b28b11a.html
我已经很努力的用最简洁的语言说明问题
并且已经把版面排好了,不会看着头昏的。麻烦抽空看下。
上面代码遗留下来的问题。希望能解决。。谢谢!