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;
}

7.使用api读取文件路径

getFilesDir() public class MainActivity extends Activity { private EditText et_name; private ...
  • augfun
  • augfun
  • 2017年01月12日 23:54
  • 1179

Windows路径操作API函数全集

PathRemoveArgs  去除路径的参数 PathRemoveBackslash  去除路径最后的反斜杠"\" PathAddBackslash  在路径最后加上反斜杠"\" PathRemov...
  • chenlycly
  • chenlycly
  • 2015年10月11日 09:56
  • 1124

《Windows API》创建文件写入系统目录路径

UINT WINAPI GetSystemDirectory( _Out_ LPTSTR lpBuffer, _In_ UINT uSize );#include #include #i...
  • HERGhost
  • HERGhost
  • 2016年05月16日 11:34
  • 516

API 根据句柄 获得进程可执行文件路径的几种方法

想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好...
  • zjccsg
  • zjccsg
  • 2016年07月16日 20:00
  • 1040

获取指定路径下目录或文件的大小

double totalSize = getDirSize(new File("f:\\电影")); public static double getDirSize(File file) { ...
  • u012716909
  • u012716909
  • 2016年08月22日 21:37
  • 492

windows api 读取目录下所有文件

#include #include void enum_path(char *cpath){ WIN32_FIND_DATA wfd; HANDLE hfd; char cdir[M...
  • bazingaz
  • bazingaz
  • 2011年11月05日 14:39
  • 1692

在windows下和linux下获取文件绝对路径

在上传文件的时候发现,用Class.getResource("/")方法获取的路径在Windows下面可以使用,在linux下直接就挂了,找不到路径,最后修改为request.getSession()...
  • zyn010101
  • zyn010101
  • 2013年05月14日 13:36
  • 1924

linux shell获取路径的文件名及其目录名

完整的文件名最长可以到达4096个字符。 那么,怎么知道哪个是文件名?哪个是目录名?就是利用斜线(/)来分辨。 其实,获取文件名或者是目录名,一般的用途是在写程序时进行判断。  下面我们简单以几...
  • yff1030
  • yff1030
  • 2012年08月12日 21:47
  • 12423

MFC获取打开目录路径和获取文件路径

获取目录路径方法1:
  • yal179
  • yal179
  • 2014年06月05日 10:45
  • 1862

Java-读取某个目录下所有文件、文件夹和3种从文件路径中获取文件名的方法

1 读取某个目录下所有文件、文件夹public static ArrayList getFiles(String path) { ArrayList files = new ArrayList...
  • u013943420
  • u013943420
  • 2017年05月04日 11:48
  • 2820
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows API函数获取指定文件目录下文件路径(vc6.0通过)
举报原因:
原因补充:

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