【问题标题】:Check if file is present in some directory in c++检查文件是否存在于c ++中的某个目录中
【发布时间】:2012-02-23 02:14:24
【问题描述】:

我正在使用 Visual C++ 从某个目录读取文件。我如何检查该文件是否存在。 如果我使用:

file.open("file.txt", ios::in);

file 是 fstream 的成员。如果该文件不存在,这将创建一个文件。 我如何检查该文件是否存在。 谢谢

【问题讨论】:

  • 你确定吗? ios::in 单独不应创建文件。也许您正在将其他标志传递给open()
  • 允许 WINAPI 吗?使用ifstream 或类似名称不足以确定文件是否存在,因为open() 尝试可能会因权限检查而失败。
  • @hamidi - 我不知道标志,但 ios::in 是我唯一使用的东西

标签: c++ visual-c++ file-handling


【解决方案1】:
ifstream my_file("file.txt");
if (my_file.good())
{
  // read away
}

【讨论】:

    【解决方案2】:

    如果该文件不存在,您的代码将创建 no 文件(在大多数系统上,假设 filestd::ifstream)。

    由于文件系统访问固有的并发性,没有可靠的方法来检查文件是否存在。最好的方法是简单地打开文件进行读取访问并测试是否成功:

    if (file.good()) …
    // or simply
    if (file) …
    

    【讨论】:

    • 但是在我使用 good() 之前,我需要使用 open(),不是吗?如果不存在,这将创建一个文件...
    【解决方案3】:

    如果文件丢失,像这样调用文件不应该创建文件。它应该失败并且对 file.is_open() 的成功调用将返回 false。

    【讨论】:

    • SampleDialog::fileHandler.open("file.txt", ios::in); if(SampleDialog::fileHandler.is_open()){MessageBox("文件打开", NULL, MB_OK);这是我正在使用的代码。调用 open() 的那一刻,如果文件不存在,则会创建一个文件。然后 is_open() 总是评估为真。
    【解决方案4】:

    如果您在 Windows 上工作,则可以使用 Windows API 为您完成这项工作。这是一个简短的代码 sn-p 为您...您必须传递 file.txt 的完整路径才能成功。例如D:\MyFolder\file.txt。

        WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    
    hFind = FindFirstFile("D:\MyFolder\file.txt", &FindFileData);
    GetLastError();
    
        if (hFind == INVALID_HANDLE_VALUE)
              // File not found
    

    【讨论】:

      【解决方案5】:

      您的代码可以实现以下内容:

      ifstream file("text.text"); 
      
      if(!file){
      //handle error / throw exception here
      }
      

      【讨论】:

        猜你喜欢
        • 2012-12-19
        • 2016-12-24
        • 2012-06-28
        • 2011-03-16
        • 1970-01-01
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 2019-02-17
        相关资源
        最近更新 更多