×

c根据文件路径获取文件信息

c根据文件路径获取文件信息(根据文件路径获取文件流)

admin admin 发表于2023-03-24 21:49:09 浏览51 评论0

抢沙发发表评论

本文目录一览:

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就是得到的文件类型