【问题标题】:find file starting with a certain string [duplicate]查找以某个字符串开头的文件[重复]
【发布时间】:2015-11-10 02:14:32
【问题描述】:

我想知道如何检查文件是否存在:

例如我有很多文件:

Boba.txt
James.txt
Jamy.txt
Boby.txt 

如何检查以 Bob 开头的文件是否存在?

【问题讨论】:

  • 文件名是否存储在字符串数组中?
  • 获取目录中所有文件的列表,然后检查每个文件是否与您的前缀匹配
  • 您使用的是哪个版本的 C++?请发布您的代码,如果有的话!
  • @Marmik 最旧版本,不是 c++11
  • @MarmiK 这似乎是在询问是否存在以前缀开头的文件,这与链接的问题完全不同。

标签: c++ file


【解决方案1】:

注意,我假设您使用的是 Windows 系统并且文件位于同一目录中。

您可以使用FindFirstFileFindNextFile 函数遍历目录。前缀可以包含在搜索词中。

示例

std::string strSearch = "C:\\Some Directory\\Bob*";
WIN32_FIND_DATAA ffd;
HANDLE hFind = FindFirstFileA(strSearch .c_str(), &ffd);

do
{
    std::string strFile = ffd.cFileName;
}
while (FindNextFileA(hFind, &ffd) != 0);

正确的错误检查和如何处理目录留给读者练习。

【讨论】:

    【解决方案2】:

    假设您需要在 C++ 中执行此操作,boost::filesystem 库会很有帮助。在这种情况下,您的问题可以通过here 发布的解决方案的变体来解决。在您的情况下,您不需要std::multimap,但可以使用简单的std::string::find

    【讨论】:

      【解决方案3】:

      您可以使用 fopen 以只读方式打开文件 "r"。如果文件不存在,fopen 将返回一个 NULL 指针。您可以对程序所需的任何文件执行此操作。

      #include <cstdio>
      int main ()
      {
        FILE **pFile;
        pFile[0] = fopen ("Boba.txt","r");
        pFile[1] = fopen ("Boby.txt","r");
        if (pFile[0]!=NULL || pFile[1]!=NULL){
          printf("File starting with \"bob\" exists.");
        }
        else printf("File does not exist."); 
        return 0; 
      }
      

      【讨论】:

      • 您的代码正在写入无效的内存空间:您没有为 pFile 项目保留空间,但您正在使用它们。代码很小,不会引起任何大问题,但在较大的项目中可能会出现。
      • 感谢您的评论。它是公平的。谢谢。
      猜你喜欢
      • 2015-07-11
      • 1970-01-01
      • 2013-10-14
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多