21xrx.com
2024-09-19 09:26:06 Thursday
登录
文章检索 我的文章 写文章
C++如何获取文件名
2023-07-04 17:26:24 深夜i     --     --
C++ 获取 文件名

在C++中,文件名是一个非常重要的概念,我们在打开、读取、写入文件时都需要使用文件名。那么,C++如何获取文件名呢?

首先,我们需要理解文件名的概念。文件名是指存储设备中存储文件的唯一名称。在Windows系统中,文件名通常由一个文件名和扩展名组成,例如:example.txt。在Linux系统中,文件名通常没有扩展名,例如:example。

在C++中,获取文件名有多种方法,下面介绍其中两种比较常用的方法。

方法一:使用标准库函数

C++的标准库提供了许多文件操作函数,包括获取文件名的函数。使用标准库函数获取文件名的基本过程如下:

1. 打开文件,获取文件句柄。

2. 使用文件句柄调用_get_osfhandle()函数,获取操作系统文件句柄。

3. 使用操作系统文件句柄调用GetFileInformationByHandle()函数,获取文件信息。

4. 从文件信息中获取文件名。

下面是使用标准库函数获取文件名的示例代码:


#include <iostream>

#include <fstream>

#include <Windows.h>

using namespace std;

int main()

{

  // 打开文件

  fstream file("example.txt", ios::in);

  // 获取文件句柄

  int fileHandle = _fileno(file);

  // 获取操作系统文件句柄

  HANDLE osFileHandle = (HANDLE)_get_osfhandle(fileHandle);

  // 获取文件信息

  BY_HANDLE_FILE_INFORMATION fileInfo;

  GetFileInformationByHandle(osFileHandle, &fileInfo);

  // 获取文件名

  wstring fileName = fileInfo.cFileName;

  string fileNameStr(fileName.begin(), fileName.end());

  cout << fileNameStr << endl;

  return 0;

}

方法二:使用Boost库

除了使用标准库函数外,我们还可以使用第三方库来获取文件名。其中,Boost库是一个强大的C++库,它提供了许多常用的功能,包括文件操作。

使用Boost库获取文件名的基本过程如下:

1. 打开文件,获取文件句柄。

2. 使用文件句柄调用boost::filesystem::path()函数,创建路径对象。

3. 使用路径对象调用filename()函数,获取文件名。

下面是使用Boost库获取文件名的示例代码:


#include <iostream>

#include <fstream>

#include <boost/filesystem.hpp>

using namespace std;

using namespace boost::filesystem;

int main()

{

  // 打开文件

  fstream file("example.txt", ios::in);

  // 获取文件句柄

  int fileHandle = _fileno(file);

  // 创建路径对象

  path filePath = path_from_handle(fileHandle);

  // 获取文件名

  string fileNameStr = filePath.filename().string();

  cout << fileNameStr << endl;

  return 0;

}

总结

以上是C++获取文件名的两种方法,一种是使用标准库函数,另一种是使用Boost库。无论哪种方法,都需要打开文件,获取文件句柄,然后再通过文件句柄来获取文件名。选择哪种方法,可以根据自己的需求来决定。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复