VC++已知文件路径,如何获取路径下的文件名

已经从配置文件中读取了本地路径,都存储在g_LocalPath[i]这个CString类型的数组里了,我如何写个函数,通过已知路径,读取路径下的文件名,... 已经从配置文件中读取了本地路径,都存储在g_LocalPath[i] 这个CString类型的数组里了,我如何写个函数,通过已知路径,读取路径下的文件名, 展开
 我来答
Suimua
2014-01-11 · TA获得超过317个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:59.6万
展开全部

楼主是想从路径下得到文件名吗

假设路径是C:\1\2\3.txt,楼主是想要得到3.txt这个文件名吧,其实用CString很好解决,反向查找\就可以了


	CString sPath = _T("c:\\1\\2\\3.txt");
CString sFile;
int i = sPath.ReverseFind('\\');
if (i > 0)
{
sFile = sPath.Mid(i + 1);//sFile就是3.txt了
}

 或者我理解错了,楼主是要枚举路径下的文件名?

嫑名字可以吗
推荐于2016-08-06 · TA获得超过389个赞
知道答主
回答量:90
采纳率:0%
帮助的人:8.1万
展开全部

先获取路径名,然后用windows自带的API函数,获取路径下所有内容。

相关函数为FindFirstFile,获取文件夹下面第一个文件名,FindNextFile,在获取第一个之后,连续调用获取后续所有文件名列表。

注意获取到的文件名是包含文件夹名字的,需要区分。


示例代码如下。具体解析见注释:

#include <stdio.h>
#include<windows.h>
#include<iostream>
#include<string>
using namespace std;
int count = 0;
void find(char * lpPath)//查找lpPath下的所有文件。
{
char save_path[200];
char szFile[MAX_PATH] = {0};
char szFind[MAX_PATH];
char root[MAX_PATH];

WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);

strcat(szFind,"*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);//开始查找。


if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//对文件夹进行递归查找。如果只需要列出当前文件夹下文件,不需要递归,这个分支可以删除。
{
if(FindFileData.cFileName[0]!='.')//排除当前和上一级路径(.和..)
{
strcpy(szFile,lpPath);
//strcat(szFile,"//");
strcat(szFile,FindFileData.cFileName);
strcat(szFile,"//");
find(szFile);//递归调用查找子文件夹。
}
}
else
{

strcpy(root, lpPath);
strcat(root,FindFileData.cFileName);
cout << root << endl;//找到一个文件,将其输出。
}


if(!FindNextFile(hFind,&FindFileData)) break;//查找结束。
}
FindClose(hFind);
}
void main()
{
find(".");//查找当前工作目录所有文件。
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
任明星Ming
推荐于2016-01-19 · TA获得超过798个赞
知道小有建树答主
回答量:1061
采纳率:100%
帮助的人:1146万
展开全部

给你个获取文件夹大小的例子程序,里面就用了递归方法,枚举了所有的文件。你可以将其改编成为,获取所有文件名。

INT64 GetDirSize(LPCSTR strDirPath)
{
TCHAR szFileFilter[512] = {0};
TCHAR szFilePath[512] = {0};
DWORD64 dwSize = 0;
WIN32_FIND_DATA fileinfo;
HANDLE hFind = NULL;

strcpy_s(szFilePath, strlen(strDirPath) + 1, strDirPath);
strcat_s(szFilePath, strlen(szFilePath) + strlen("\\") + 1, "\\");
strcpy_s(szFileFilter, strlen(szFilePath) + 1, szFilePath);
strcat_s(szFileFilter, strlen("*.*") + strlen(szFileFilter) + 1, "*.*");
hFind = FindFirstFile(szFileFilter, &fileinfo);

do
{
if(fileinfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (!strcmp(fileinfo.cFileName,".") || !strcmp(fileinfo.cFileName,".."))
{
//Do nothing for "." and ".." folders
}
else
{
TCHAR sztmp[512] = {0};
strcpy_s(sztmp, strlen(szFilePath) + 1, szFilePath);
strcat_s(sztmp, strlen(fileinfo.cFileName) + strlen(sztmp) + 1, fileinfo.cFileName);
dwSize = dwSize + GetDirSize(sztmp);
}
}
dwSize += fileinfo.nFileSizeLow;
} while (FindNextFile(hFind, &fileinfo));

FindClose(hFind);
return (INT64)dwSize;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
101_111_102
2015-11-11 · 超过15用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:23.6万
展开全部
这个得使用系统提供的api,vc是windows平台下,就用 <windows.h>, 然后利用 findFirstFile, 和 findNextFile 这样的函数吧,具体看这篇blog: http://blog.csdn.net/lampqiu/article/details/41245075

没有试验过不保证正确……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8251498
2015-10-27
知道答主
回答量:41
采纳率:0%
帮助的人:6.9万
展开全部
1.开门见山直接回答知识点
2.对相关知识点进行延伸
3.规范排版,内容充实更容易通过认证哦
4.补充参考资料(没有可以忽略哦~)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式