c++获取指定目录下的文件名

我想获取指定目录下的所有文件名,但是用网上的方法WIN32_FIND_DATAFindFileData;HANDLEhFind;……都是可以在vc6.0中可以运行,而在v... 我想获取指定目录下的所有文件名,但是用网上的方法WIN32_FIND_DATA FindFileData;
HANDLE hFind; ……都是可以在vc6.0中可以运行,而在visualstudio2010中总是出现LPCWSTR类型的问题。我好不容易把那些问题解决了,结果又出了问题,总是hFind == INVALID_HANDLE_VALUE 代码如下:
//功能:获取communication目录下指定类型的文件名
//参数:三个常量,代表要获取文件的文件类型STU,TEA,ADM.如STU,代表扩展名为.stu的文件类型
//返回动态生成的文件名的string对象数组首地址(返回值需要delete掉)
string* AdmFile::GetComFileNames(int FileTpye){
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
LPCWSTR filepath;
switch(FileTpye){
case STU:
filepath = L".\\communication\\*.stu";
break;
case TEA:
filepath = L".\\communication\\*.tea";
break;
case ADM:
filepath = L".\\communication\\*.adm";
break;
}

hFind = FindFirstFile(filepath, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
return NULL;
}
int find = 1;
int i = 0;
while(find){
find = FindNextFile(hFind, &FindFileData);
i++;
}
FindClose(hFind);
string* filenames = new string[i];

hFind = FindFirstFile(filepath, &FindFileData);
if(hFind == INVALID_HANDLE_VALUE) {
return NULL;
}
find = 1;
i = 0;
while(find){
filepath = FindFileData.cFileName;
DWORD dwMinSize = 0;
LPSTR lpszStr = NULL;
dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,filepath,-1,NULL,0,NULL,FALSE);

lpszStr = new char [dwMinSize];
WideCharToMultiByte(CP_OEMCP,NULL,filepath,-1,lpszStr,dwMinSize,NULL,FALSE);
filenames[i] = lpszStr;
delete [] lpszStr;
i++;

find = FindNextFile(hFind, &FindFileData);

}
// for(int j=0; j<i; ++j){
// cout << filenames[j] << endl;
// }
FindClose(hFind);
return filenames;
}

求解释……
如果给我介绍别的方法请保证在visualstudio2010下能用
小弟先谢谢了
展开
 我来答
匿名用户
推荐于2018-04-11
展开全部

可以使用searchenv函数来实现,参考代码如下:

int main( void )
{
   char pathbuffer[_MAX_PATH];
   char searchfile[] = "×.EXE";
   char envvar[] = "PATH";
 
   // Search for file in PATH environment variable:
   _searchenv( searchfile, envvar, pathbuffer ); // C4996
   // Note: _searchenv is deprecated; consider using _searchenv_s
   if( *pathbuffer != '\0' )
      printf( "Path for %s:\n%s\n", searchfile, pathbuffer );
   else
      printf( "%s not found\n", searchfile );
}
匿名用户
推荐于2016-02-19
展开全部
3.34 icePub_getPathList

l 函数原型:
int WINAPI icePub_getPathList(char *strCurrentPath,char *strPathList,int maxLen,int flag)
输入:strCurrentPath 待搜索路径名
maxLen strPathList最大长度
flag 信息标志,0 只文件名,1 文件长度
输出:strPathList 带全路径文件名

VC sample代码:
char buffer[1024*10+1];
{
typedef int (WINAPI ICEPUB_GETPATHLIST)( char *strCurrentPath,char *strPathList,int maxLen,int flag);
ICEPUB_GETPATHLIST *icePub_getPathList = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_getPathList = (ICEPUB_GETPATHLIST *)GetProcAddress(hDLLDrv, "icePub_getPathList");
}

if(icePub_getPathList != NULL)
{
int a;
buffer[0]=0;
a=icePub_getPathList("C:\\",buffer,1024*10,1);
AfxMessageBox(buffer);
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);
}

http://dl.icese.net/dev.php?f=icePubDll.rar 下载
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闻人慕霜
2011-05-26 · TA获得超过875个赞
知道小有建树答主
回答量:897
采纳率:0%
帮助的人:478万
展开全部

#define _WIN32_WINNT 0x0400

#include <windows.h>
#include <stdio.h>

int main()
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;

int find = 1;
hFind = FindFirstFile("*.jpg", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
return (0);
}
else
{
while(find)
{
printf ("The first file found is %s\n", FindFileData.cFileName);
find = FindNextFile(hFind, &FindFileData);
}
FindClose(hFind);
return (1);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式