C++ 的Wince平台下如何遍历文件夹,获取所有的文件名

搬砖的码农 2014-05-24 10:28:46
假如在\\mypro\\INI\\路径下(也可能别的文件)有文件a.ini、b.ini、c.ini……
如何遍历出所有的文件名(a.ini、b.ini、c.ini…)
Wince不是很熟,求帮忙,谢了
...全文
217 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
搬砖的码农 2014-05-26
  • 打赏
  • 举报
回复
引用 6 楼 accessysq 的回复:
FindFirstFile(L"\\FlashDev\\sound\\",&FindFileData); 你这样只能判断文件夹是否存在 FindFirstFile(L"\\FlashDev\\sound\\*.*",&FindFileData);要找文件最好是这样。替换通配符可以指定更具体的 如 *.c, 找c文件。 不知道你弄清楚了没?
哦,确实是少了*.*的原因,加了之后成功了,非常感谢
搬砖的码农 2014-05-24
  • 打赏
  • 举报
回复
FindFileData.dwFileAttributes值是16
搬砖的码农 2014-05-24
  • 打赏
  • 举报
回复
引用 3 楼 91program 的回复:
[quote=引用 2 楼 zhurcn 的回复:]
之前我用过这个了,但返回的FindFileData.cFileName不是文件名,而是路径的文件夹名


以上是工程中现成的代码,FindFileData.cFileName 是文件名,而不是 LZ 所说的什么路径文件夹名。
LZ 要不就把你的代码弄出来,看看是什么问题。

如果你的目录中有子目录,肯定是会先找到这些子目录的,然后根据属性来判断是文件、还是子目录,就是我注释写的那句话。[/quote]
判断条件没进入,没有找到目录?

WIN32_FIND_DATA FindFileData;
memset(FindFileData.cFileName, 0, sizeof(FindFileData.cFileName));
HANDLE hFind = FindFirstFile(L"\\FlashDev\\sound\\",&FindFileData);
if(hFind != INVALID_HANDLE_VALUE)
{
do
{
DWORD dwDirAttr = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if(FILE_ATTRIBUTE_DIRECTORY != dwDirAttr) // 目录
{
wchar_t filename[260] = {0,};
swprintf(filename,L"%s",FindFileData.cFileName);
wprintf(L"==== filename=%s \n", filename);
}
}while(::FindNextFile(hFind,&FindFileData));
}
91program 2014-05-24
  • 打赏
  • 举报
回复
引用 2 楼 zhurcn 的回复:
之前我用过这个了,但返回的FindFileData.cFileName不是文件名,而是路径的文件夹名


以上是工程中现成的代码,FindFileData.cFileName 是文件名,而不是 LZ 所说的什么路径文件夹名。
LZ 要不就把你的代码弄出来,看看是什么问题。

如果你的目录中有子目录,肯定是会先找到这些子目录的,然后根据属性来判断是文件、还是子目录,就是我注释写的那句话。
搬砖的码农 2014-05-24
  • 打赏
  • 举报
回复
引用 1 楼 91program 的回复:
和 PC 差不多是一样的

hFind = ::FindFirstFile(CurrentFullPath,&FindFileData);
if(hFind != INVALID_HANDLE_VALUE)
{
	do
	{
		DWORD dwDirAttr = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
		if(FILE_ATTRIBUTE_DIRECTORY != dwDirAttr)		// 判断条件自己修改
		{
			......
		}
	}while(::FindNextFile(hFind,&FindFileData));
}
之前我用过这个了,但返回的FindFileData.cFileName不是文件名,而是路径的文件夹名
91program 2014-05-24
  • 打赏
  • 举报
回复
和 PC 差不多是一样的

hFind = ::FindFirstFile(CurrentFullPath,&FindFileData);
if(hFind != INVALID_HANDLE_VALUE)
{
	do
	{
		DWORD dwDirAttr = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
		if(FILE_ATTRIBUTE_DIRECTORY != dwDirAttr)		// 判断条件自己修改
		{
			......
		}
	}while(::FindNextFile(hFind,&FindFileData));
}
  • 打赏
  • 举报
回复
FindFirstFile(L"\\FlashDev\\sound\\*",&FindFileData) 更简单用一个*应该也可以。
引用 4 楼 zhurcn 的回复:
[quote=引用 3 楼 91program 的回复:] [quote=引用 2 楼 zhurcn 的回复:] 之前我用过这个了,但返回的FindFileData.cFileName不是文件名,而是路径的文件夹名
以上是工程中现成的代码,FindFileData.cFileName 是文件名,而不是 LZ 所说的什么路径文件夹名。 LZ 要不就把你的代码弄出来,看看是什么问题。 如果你的目录中有子目录,肯定是会先找到这些子目录的,然后根据属性来判断是文件、还是子目录,就是我注释写的那句话。[/quote] 判断条件没进入,没有找到目录?

		WIN32_FIND_DATA  FindFileData;
		memset(FindFileData.cFileName, 0, sizeof(FindFileData.cFileName));
		HANDLE hFind = FindFirstFile(L"\\FlashDev\\sound\\",&FindFileData);
		if(hFind != INVALID_HANDLE_VALUE)
		{
			do
			{
				DWORD dwDirAttr = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
				if(FILE_ATTRIBUTE_DIRECTORY != dwDirAttr)        // 目录
				{
					wchar_t filename[260] = {0,};
					swprintf(filename,L"%s",FindFileData.cFileName);
					wprintf(L"==== filename=%s \n", filename);
				}
			}while(::FindNextFile(hFind,&FindFileData));
		}
[/quote]
  • 打赏
  • 举报
回复
FindFirstFile(L"\\FlashDev\\sound\\",&FindFileData); 你这样只能判断文件夹是否存在 FindFirstFile(L"\\FlashDev\\sound\\*.*",&FindFileData);要找文件最好是这样。替换通配符可以指定更具体的 如 *.c, 找c文件。 不知道你弄清楚了没?

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧