关于判断指定路径文件是不是文件夹

laji1601820179 2014-01-08 11:09:03

if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

用这个来判断,好像有些明明是文件夹的就是判断不出来(我是要判断C:/windows下边的文件夹数目,写的程序同属性里边显示的不一样,),,,这是为什么?有更好的方法么,?
...全文
229 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dzlua 2014-02-17
  • 打赏
  • 举报
回复
access (path,0),返回值为0表示存在,-1表示不存在,也可以查文件
movsd 2014-01-09
  • 打赏
  • 举报
回复
BOOL PathIsDirectory(LPCTSTR pszPath); Header: Shlwapi.h. Library: Shlwapi.lib.
打你屁屁 2014-01-08
  • 打赏
  • 举报
回复
试试这样(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, "..")
laji1601820179 2014-01-08
  • 打赏
  • 举报
回复
忘了说WIN32_FIND_DATA wfd;定义
赵4老师 2014-01-08
  • 打赏
  • 举报
回复
C:\>junction /? Junction v1.06 - Windows junction creator and reparse point viewer Copyright (C) 2000-2010 Mark Russinovich Sysinternals - www.sysinternals.com The first usage is for displaying reparse point information, the second usage is for creating a junction point, and the last for deleting a junction point: usage: junction [-s] [-q] <file or directory> -q Don't print error messages (quiet) -s Recurse subdirectories usage: junction <junction directory> <junction target> example: junction d:\link c:\windows usage: junction -d <junction directory>
starytx 2014-01-08
  • 打赏
  • 举报
回复
正好有个现成的函数给你参考一下
//查找目录dir下的次级目录(不嵌套),填充到outList中
void searchFileInDirectroy( const std::string& dir, std::vector<std::string>& outList )
{        
	WIN32_FIND_DATA findData;        
	HANDLE hHandle;        
	std::string filePathName;        
	std::string fullPathName;       
	filePathName = dir;        
	filePathName += "\\*.*";       
	hHandle = FindFirstFile( filePathName.c_str(), &findData );      
	if( INVALID_HANDLE_VALUE == hHandle )        
	{         
		return;        
	}        
	do        
	{         
		if( strcmp(".", findData.cFileName) == 0 || strcmp("..", findData.cFileName) == 0 ) 
		{                        
			continue;             
		}                
		fullPathName = dir;               
		fullPathName += "\\";              
		fullPathName += findData.cFileName;              
		if( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )      // 是目录
		{
			outList.push_back(fullPathName);
		}               
	} 
	while( FindNextFile( hHandle, &findData ) );  
	FindClose( hHandle );
}
dj827454 2014-01-08
  • 打赏
  • 举报
回复
楼主需要再加一个判断条件:判断一下文件是否可以被正确的打开。 这样就可以了。 注:foundFileName是待判断的文件的名字。 if( // a) it's a file, not a directory !(::GetFileAttributes (foundFileName) & FILE_ATTRIBUTE_DIRECTORY) && // b) it can be opened exclusively ((hFile = ::CreateFile ( foundFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) )
AndyStevens 2014-01-08
  • 打赏
  • 举报
回复
第4行 注释掉
AndyStevens 2014-01-08
  • 打赏
  • 举报
回复
学习4老赵
#include <windows.h>
#include <stdio.h>
#include <string.h>
#ifdef UNICODE
#define PATHFORFIND L"D:/f/zl/"
void Findfiles(TCHAR* path)
{
	HANDLE h;
	WIN32_FIND_DATA fd;
	TCHAR tmp_path[MAX_PATH];
	TCHAR tmp_blank[MAX_PATH] = {0};
	static int blank = 0;

	blank++;
	int i=1;
	for(;i<blank;i++)
	{
		wcscat(tmp_blank,L"   ");
	}
	swprintf(tmp_path,L"%s/*",path);
	h = FindFirstFileW(tmp_path,&fd);
	if (h==INVALID_HANDLE_VALUE)
	{
		blank--;
		return;
	}
	do{
		swprintf(tmp_path,L"%s%s%s/%s\n",tmp_blank,tmp_blank,path,fd.cFileName);
 		if(wcscmp(fd.cFileName,L".")==0 ||wcscmp(fd.cFileName,L"..")==0 )//deal with . and .. 
 			continue;
		swprintf(tmp_path,L"%s%s",tmp_blank,fd.cFileName);	
		if(fd.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN)
			wcscat(tmp_path,L"--(隐藏)");
		wcscat(tmp_path,L"\n");
		wprintf(tmp_path);
		if( fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY )
		{
			swprintf(tmp_path,L"%s/%s",path,fd.cFileName);
			Findfiles(tmp_path);
		}

	}while(FindNextFileW(h,&fd));
	blank--;
	return;
}
int main()
{  
	Findfiles(PATHFORFIND);
	return 0;
}
赵4老师 2014-01-08
  • 打赏
  • 举报
回复
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\WinNT.h 5879: #define FILE_ATTRIBUTE_READONLY 0x00000001 5880: #define FILE_ATTRIBUTE_HIDDEN 0x00000002 5881: #define FILE_ATTRIBUTE_SYSTEM 0x00000004 5882: #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 5883: #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 5884: #define FILE_ATTRIBUTE_DEVICE 0x00000040 5885: #define FILE_ATTRIBUTE_NORMAL 0x00000080 5886: #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 5887: #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 5888: #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 5889: #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 5890: #define FILE_ATTRIBUTE_OFFLINE 0x00001000 5891: #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 5892: #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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