本文目录一览:
- 1、C++中如何从路径字符串中获取文件名!
- 2、C语言:如何得到指定地址的文件夹中所有文件的文件名和其修改时间 包括子文件内的
- 3、vc中已知文件的绝对路径怎么获得文件名和所在文件夹啊
- 4、c语言如何获取用户通过键盘输入的文件目录中的文件名和文件路径,ballball大佬帮帮我🙏求代码?
- 5、c语言中如何得到当前文件所在位置
- 6、c#中怎么根据一个文件的全路径来获得文件的类型,比如C:\1.pdf,获得的类型为PDF文件
C++中如何从路径字符串中获取文件名!
C风格:
char *p = strrchr(path.c_str(), '/')
p是path里最后一个'/'的地址。然后
string s(p + 1);
,s就是"world.shp"了。
C++风格:
int pos = path.find_last_of('/');
pos就是最后一个'/'的下标。
然后
string s(path.substr(pos + 1) );
s就是"world.shp"了。
C语言:如何得到指定地址的文件夹中所有文件的文件名和其修改时间 包括子文件内的
俺前段时间写了段功能相似的程序,但用的是用C++/STL写的,访问目录使用了win32 api(能访问指定目录的子目录)。
获取文件名与修改时间由FileOfDirectory::detectFiles实现(其实你只需要看这一个函数即可)。
这段程序以STL数组保存单个文件名,查询过程中没有回溯,wcsstr函数内部也是KMP,所以事实上这个程序也是按KMP查询的
安时间排序时使用STL算法库,时间复杂度同快速排序。
最后,这段代码是在VS2010编译的。
# include vector
# include algorithm
struct FileNameAndTime
{
wchar_t szPath[MAX_PATH]; //file directory
wchar_t szName[MAX_PATH]; //file name
FILETIME lastAcc; //last access time
FileNameAndTime()
{
memset(lastAcc, 0, sizeof(lastAcc));
memset(szName, 0, sizeof(wchar_t) * MAX_PATH);
memset(szPath, 0, sizeof(wchar_t) * MAX_PATH);
}
FileNameAndTime(const PWCHAR fn, const PWCHAR pa, const LPFILETIME ft)
{
if( (0 == fn) || (0 == pa) || (0 == ft) )
return;
memcpy(lastAcc, ft, sizeof(lastAcc));
wcscpy(szName, fn);
wcscpy(szPath, pa);
}
FileNameAndTime(const FileNameAndTime fnd)
{
memcpy(this-lastAcc, fnd.lastAcc, sizeof(this-lastAcc));
wcscpy(this-szName, fnd.szName);
wcscpy(this-szPath, fnd.szPath);
}
const FileNameAndTime operator=(const FileNameAndTime fnd)
{
if(this != fnd) {
memcpy(this-lastAcc, fnd.lastAcc, sizeof(this-lastAcc));
wcscpy(this-szName, fnd.szName);
wcscpy(this-szPath, fnd.szPath);
}
return *this;
}
void GetFullPath( wchar_t (fp)[MAX_PATH] ) const
{
wcscpy(fp, szPath);
wcscat(fp, szName);
}
friend bool operator(const FileNameAndTime l, const FileNameAndTime r); //compare this object by access time-c根据文件路径获取文件信息
};
bool operator(const FileNameAndTime l, const FileNameAndTime r) //for sort
{
if(l.lastAcc.dwHighDateTime r.lastAcc.dwHighDateTime)
return true;
else if (l.lastAcc.dwHighDateTime == r.lastAcc.dwHighDateTime)
{
if(l.lastAcc.dwLowDateTime r.lastAcc.dwLowDateTime)
return true;
}
return false;
}
class FileOfDirectory
{
private:
static const wchar_t szDot[];
static const wchar_t szDotDot[];
static const wchar_t cStar;
static const wchar_t cSlash;
private:
std::vectorFileNameAndTime vecFT;
wchar_t szCurrentPath[MAX_PATH];
private:
void validatePath(const wchar_t* pPath)
{
wcscpy(szCurrentPath, pPath);
int len = wcslen(szCurrentPath);
if( (cStar != szCurrentPath[len - 1])
(cSlash != szCurrentPath[len - 2]) )
{
szCurrentPath[len] = cSlash;
szCurrentPath[len + 1] = cStar;
szCurrentPath[len + 2] = 0;
return;
}
if( (cStar != szCurrentPath[len - 1])
(cSlash == szCurrentPath[len - 2]) )
{
szCurrentPath[len] = cStar;
szCurrentPath[len + 1] = 0;
return;
}
}
void detectFiles(const LPWSTR szDir)
{
WIN32_FIND_DATA ffd;
HANDLE hFind = ::FindFirstFile(szDir, ffd);
if (INVALID_HANDLE_VALUE == hFind)
return ;
do
{
if (ffd.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY)
{
if( (0 == wcscmp(ffd.cFileName, szDot)) || (0 == wcscmp(ffd.cFileName, szDotDot)))
continue;
else
{
wchar_t szTempPath[MAX_PATH];
wcscpy(szTempPath, szDir);
szTempPath[wcslen(szTempPath) - 1] = 0;
wcscat(szTempPath, ffd.cFileName);
int len = wcslen(szTempPath);
szTempPath[len] = cSlash;
szTempPath[len + 1] = cStar;
szTempPath[len + 2] = 0;
detectFiles(szTempPath);
}
}
else {
wchar_t path[MAX_PATH];
wcscpy(path, szDir);
path[wcslen(path) - 1] = 0;
vecFT.push_back(FileNameAndTime(ffd.cFileName,path, ffd.ftLastAccessTime));
}
}
while (::FindNextFile(hFind, ffd) != 0);
}
public:
FileOfDirectory(const LPWSTR szDir)
{
validatePath(szDir);
detectFiles(szCurrentPath);
}
void SortByAccessTime()
{
sort(vecFT.begin(), vecFT.end());
}
int NumOfFiles() const { return vecFT.size(); }
int FindFilesByKeyWord(wchar_t* pszFn, int* outCome, int outComeLen, bool bMatchAll = false)
{
wchar_t szTemp[MAX_PATH], szFnLwr[MAX_PATH];
int index = 0;
wcscpy(szFnLwr, pszFn);
_wcslwr(szFnLwr);
for(int i = 0; i vecFT.size(); ++i)
{
wcscpy(szTemp, vecFT[i].szName);
_wcslwr(szTemp);
if(true == bMatchAll)
{
if(0 == wcscmp(szTemp, szFnLwr))
{
if(index = outComeLen)
return index;
outCome[index++] = i;
}
}
else
{
if(0 != wcsstr(szTemp, szFnLwr))
{
if(index = outComeLen)
return index;
outCome[index++] = i;
}
}
}
}
FileNameAndTime GetItemByID(int index)
{
if( (index = 0) (index vecFT.size()) )
return FileNameAndTime(vecFT[index]);
}
};
const wchar_t FileOfDirectory::szDot[] = L".";
const wchar_t FileOfDirectory::szDotDot[] = L"..";
const wchar_t FileOfDirectory::cStar = L'*';
const wchar_t FileOfDirectory::cSlash = L'\\';
void __stdcall entp3() //测试程序
{
FileOfDirectory fod(L"E:\\game");
int ids[256] = { 0 };
fod.SortByAccessTime();
int len = fod.FindFilesByKeyWord(L"main", ids, 256);
for(int i = 0; i len; ++i) {
FileNameAndTime fnt(fod.GetItemByID(ids[i]));
CDbgString::OutputDbgStringW(L"\r\n%s%s", fnt.szPath, fnt.szName);
}
}
测试结果如图所示。
vc中已知文件的绝对路径怎么获得文件名和所在文件夹啊
你可以用getPathName等函数(至于这个函数的名称有没有记错我就不敢保证了),你可以在MSDN中查,方法如下:
1。打开MSDN
2。单击“索引”
3。输入CFile 这个类,
然后查看这个类的成员函数,
如果在CFile 中查不到相关的函数,那么可以查找它的父类或者SDK
外:有很多函数其实是可以在MSDN中查到的,主要你大概知道这个函数功能或所属类就行了。
c语言如何获取用户通过键盘输入的文件目录中的文件名和文件路径,ballball大佬帮帮我🙏求代码?
int main()
{
string s = "c:\\abc\\def\\text.txt";
int xie_index = s.find_last_of('\\'); // 路径中最后一个\的位置
string file_dirname = s.substr(0, xie_index + 1);
string file_basename = s.substr(xie_index + 1, s.size());
cout file_dirname endl file_basename endl;
}
c语言中如何得到当前文件所在位置
如果是通过open方式打开的,那么第一个参数就是文件路径信息:
#include sys/types.h
#include sys/stat.h
#include fcntl.h
int open(const char *path, int oflag, /* mode_t mode */...);
如果是通过fopen方式打开的,那么第一个参数就是文件路径信息:
#include stdio.h
FILE *fopen(const char *filename, const char *mode);
无论通过open还是fopen打开文件,都必须先知道文件路径信息,尽管可能是相对路径。
如果知道了filename的内容,我们就可以定位它的绝对路径,也就是你说的完全路径。
1. filename本身就是绝对路径,ok。
2. filename是相对路径,那么先通过getcwd获取进程的执行路径,然后再获取绝对路径即可。
#include unistd.h
extern char *getcwd(char *buf, size_t size);
但是,如果进程在打开文件后又执行了chdir、fchdir之类函数的话,估计就不能够再获取文件路径信息了。
#include unistd.h
int chdir(const char *path);
int fchdir(int fildes);
c#中怎么根据一个文件的全路径来获得文件的类型,比如C:\1.pdf,获得的类型为PDF文件
string str = "E:\\log.txt";
string s = Path.GetExtension(str);
s就是得到的文件类型