Windows API函数获取指定文件目录下文件路径(vc6.0通过)

原创 2012年10月10日 00:13:30
// FileOpt.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <string>
#include <WINDOWS.H>
#include <TCHAR.H>
#include <vector>
using namespace std;

#define MAX_NUM 262

// 删除指定目录下所有文件及目录
BOOL DelDirFileOpt(string szPath)
{
	WIN32_FIND_DATA wfd;
	HANDLE hFind;
	string sFullPath;
	string sFindFilter;
	DWORD dwAttributes = 0;
	
	sFindFilter = szPath;
	sFindFilter += _T("\\*.*");
	if ((hFind = FindFirstFile(sFindFilter.c_str(), &wfd)) == INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}
	
	do
	{
		if (_tcscmp(wfd.cFileName, _T(".")) == 0 || 
			_tcscmp(wfd.cFileName, _T("..")) == 0 )
		{
			continue;
		}
		
		sFullPath = szPath;
		sFullPath += _T('\\');
		sFullPath += wfd.cFileName;
		
		//去掉只读属性
		dwAttributes = GetFileAttributes(sFullPath.c_str());
		if (dwAttributes & FILE_ATTRIBUTE_READONLY)
		{
			dwAttributes &= ~FILE_ATTRIBUTE_READONLY;
			SetFileAttributes(sFullPath.c_str(), dwAttributes);
		}
		
		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			printf("进入目录%s\n",sFullPath.c_str());
			DelDirFileOpt(sFullPath.c_str());
			RemoveDirectory(sFullPath.c_str());
			printf("删除目录%s成功\n",sFullPath.c_str());
		}
		else
		{
			if ( _tcsicmp(wfd.cFileName, _T("index.dat")) == 0)
			{
				//WipeFile(szPath, wfd.cFileName);
			}
			DeleteFile(sFullPath.c_str());
			printf("文件%s删除成功\n",sFullPath.c_str());
		}
	}while (FindNextFile(hFind, &wfd));
	
	FindClose(hFind);
	
	return TRUE;
}


/*static int g_iFlag = 0;*/

//获取指定目录下匹配的第一个文件路径
string GetPathByFileInDir(string szPath,string strFileName)
{
	WIN32_FIND_DATA wfd;
	HANDLE hFind;
	string sFullPath;
	string sFindFilter;
	string strTemp = "";
	DWORD dwAttributes = 0;
	static int iFlag;
	
	printf("进入目录%s\n",szPath.c_str());

	sFindFilter = szPath;
	sFindFilter += _T("\\*.*");
	if ((hFind = FindFirstFile(sFindFilter.c_str(), &wfd)) == INVALID_HANDLE_VALUE)
	{
		return "";
	}
	
	do
	{
		//printf("%d\n",flag);
		if (0 != iFlag)
		{
			break;
		}
		 
		if (_tcscmp(wfd.cFileName, _T(".")) == 0 || 
			_tcscmp(wfd.cFileName, _T("..")) == 0 )
		{
			continue;
		}
		
		sFullPath = szPath;
		sFullPath += _T('\\');
		sFullPath += wfd.cFileName;
		
		//去掉只读属性
		dwAttributes = GetFileAttributes(sFullPath.c_str());
// 		if (dwAttributes & FILE_ATTRIBUTE_READONLY)
// 		{
// 			dwAttributes &= ~FILE_ATTRIBUTE_READONLY;
// 			SetFileAttributes(sFullPath.c_str(), dwAttributes);
// 		}
		
		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			strTemp = GetPathByFileInDir(sFullPath,strFileName);
			
			if ( _tcsicmp(strTemp.c_str(), sFullPath.c_str()) == 0)
			{
				printf("【找到%s】\n",sFullPath.c_str());
				iFlag++;
				strTemp = sFullPath;
			}
		}
		else
		{
			if ( _tcsicmp(wfd.cFileName, strFileName.c_str()) == 0)
			{
				printf("找到%s\n",sFullPath.c_str());
				iFlag++;
				strTemp = sFullPath;
			}
		}
	}while (FindNextFile(hFind, &wfd) );
	

	FindClose(hFind);
	return strTemp;
}

//static vector<string> g_vecStr;
//获取指定目录下匹配的文件路径放到容器中返回
vector<string> GetPathsByFileInDirToVector(string szPath,string strFileName)
{
	WIN32_FIND_DATA wfd;
	HANDLE hFind;
	string sFullPath;
	string sFindFilter;
	string strTemp = "";
	DWORD dwAttributes = 0;
	static vector<string> vecStr;
	
	printf("进入目录%s\n",szPath.c_str());
	
	//g_vecStr.clear();
	
	sFindFilter = szPath;
	sFindFilter += _T("\\*.*");
	if ((hFind = FindFirstFile(sFindFilter.c_str(), &wfd)) == INVALID_HANDLE_VALUE)
	{
		//vecStr.push_back("");
		return vecStr;
	}
	
	do
	{
		
		if (_tcscmp(wfd.cFileName, _T(".")) == 0 || 
			_tcscmp(wfd.cFileName, _T("..")) == 0 )
		{
			continue;
		}
		
		sFullPath = szPath;
		sFullPath += _T('\\');
		sFullPath += wfd.cFileName;
		
		//去掉只读属性
		dwAttributes = GetFileAttributes(sFullPath.c_str());
		// 		if (dwAttributes & FILE_ATTRIBUTE_READONLY)
		// 		{
		// 			dwAttributes &= ~FILE_ATTRIBUTE_READONLY;
		// 			SetFileAttributes(sFullPath.c_str(), dwAttributes);
		// 		}
		
		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			(void)GetPathsByFileInDirToVector(sFullPath,strFileName);			
		}
		else
		{
			if ( _tcsicmp(wfd.cFileName, strFileName.c_str()) == 0)
			{
				printf("【找到%s】\n",sFullPath.c_str());
				vecStr.push_back(sFullPath);
			}
		}
	}while (FindNextFile(hFind, &wfd) );
	
	
	FindClose(hFind);
	return vecStr;
}


int main(int argc, char* argv[])
{
	char cCurPath[MAX_NUM] = {0};

	GetCurrentDirectory(MAX_NUM,cCurPath);

// 	string strDelPath = (string)cCurPath + (string)"\\testDir";
// 
// 	DelDirFileOpt(strDelPath.c_str());

	string str = GetPathByFileInDir(cCurPath,"config.cfg");

	printf("====[%s]\n",str.c_str());

	vector<string> vecStr;
	vecStr = GetPathsByFileInDirToVector(cCurPath,"config.cfg");
	
	vector<string>::iterator iterStr;

	for (iterStr=vecStr.begin();iterStr!=vecStr.end();iterStr++)
	{
		printf("******************%s\n",iterStr->c_str());
	}

	return 0;
}

相关文章推荐

Windows API函数删除指定文件目录下所有内容vc6.0通过

// FileOpt.cpp : Defines the entry point for the console application. // #include "stdafx.h" #incl...

EXCEL获取目录文件路径工具

  • 2011年09月22日 09:46
  • 535KB
  • 下载

[单元测试]_[制作单元测试(gtest)辅助动态库接口之获取指定目录的直接文件路径]

1.有时候单元测试需要对大批量的文件进行压力测试,这时候,代码里写死,xml配置文件,main的参数传递都不够方便。 2.这时候如果有一个动态库可以自动获取指定目录下的直接文件路径并返回一个C链表结构...

Java API 自带的日志管理,可配置文件路径,并自动创建不存在的目录

原文转自:http://blog.csdn.net/naruto1021/article/details/7968664,只做收藏用。 由于项目需要根据日志来跟踪了解系统信息,方便查看传输数据以及异...

windows API实现用户选择文件路径的对话框

在编写应用程序时,有时需要用户选择某个文件,以供应用程序使用,比如在某些管理程序中需要打开某一个进程,这个时候需要弹出一个对话框来将文件路径以树形图的形式表示出来,以图形化的方式供用户选择文件路径,而...
  • lanuage
  • lanuage
  • 2015年12月22日 20:12
  • 1981

『windows』文件路径,字符串相关API

原文地址:文件路径,字符串相关API 需要头文件:shlwapi.h 其中有一些函数功能存在重复,我在认为比较常用的的函数上加红。 BOOL PathFileExists(LPCTSTR ...

Shell中关于文件路径操作的API函数

以前写代码时很烦遇到处理文件路径的问题.如:提取文件路径的目录部分或者文件名部分、判断目录/文件是否存在等.每次遇到这样的问题总要自己写代码实现,提取目录就涉及到很繁琐的字符串分析操作,检测目录/文件...

全面的Android文件目录解析和获取方法(包含对6.0系统的说明)

Android系统目录的获取方法和具体代表含义,在android 6.0以前,你可以只关注外置存储是否挂载即可,但是从6.0以后,也就是M系统后,还需要关注是否有读写权限,只有具备这些权限才可以读写外...

C#路径文件目录IO常见操作汇总.

  • 2010年01月13日 14:24
  • 51KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows API函数获取指定文件目录下文件路径(vc6.0通过)
举报原因:
原因补充:

(最多只允许输入30个字)