VC++已知文件路径,如何获取路径下的文件名
已经从配置文件中读取了本地路径,都存储在g_LocalPath[i]这个CString类型的数组里了,我如何写个函数,通过已知路径,读取路径下的文件名,...
已经从配置文件中读取了本地路径,都存储在g_LocalPath[i] 这个CString类型的数组里了,我如何写个函数,通过已知路径,读取路径下的文件名,
展开
展开全部
楼主是想从路径下得到文件名吗
假设路径是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了
}
或者我理解错了,楼主是要枚举路径下的文件名?
展开全部
先获取路径名,然后用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(".");//查找当前工作目录所有文件。
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你个获取文件夹大小的例子程序,里面就用了递归方法,枚举了所有的文件。你可以将其改编成为,获取所有文件名。
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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个得使用系统提供的api,vc是windows平台下,就用 <windows.h>, 然后利用 findFirstFile, 和 findNextFile 这样的函数吧,具体看这篇blog: http://blog.csdn.net/lampqiu/article/details/41245075
没有试验过不保证正确……
没有试验过不保证正确……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.开门见山直接回答知识点
2.对相关知识点进行延伸
3.规范排版,内容充实更容易通过认证哦
4.补充参考资料(没有可以忽略哦~)
2.对相关知识点进行延伸
3.规范排版,内容充实更容易通过认证哦
4.补充参考资料(没有可以忽略哦~)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询