【问题标题】:Can't open txt files in c++ program with Visual Studio 2019无法使用 Visual Studio 2019 在 C++ 程序中打开 txt 文件
【发布时间】:2019-07-31 00:50:14
【问题描述】:

我在使用 XCode 一段时间后才开始使用 Visual Studio 2019。 我总是能够在 XCode 中打开 txt 文件,但现在 我无法在 Visual Studio 2019 中打开它们。

基本上我所做的是在“调试”选项卡中按“不调试就开始”,然后收到错误消息“文件未打开!”从我写的 else 语句中。我不确定它是否与txt文件所在的位置或文件路径有关。

以下是我目前使用的简单程序 弄清楚如何在 Visual Studio 2019 中打开 txt 文件:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    ifstream fobj;
    fobj.open("input.txt");

    if (fobj)
    {
        cout << "File Opened!\n";
    }
    else
    {
        cout << "File Did Not Open!\n";
    }

    return 0;
}

【问题讨论】:

  • 你有什么证据证明这个进程的当前目录中有一个名为“input.txt”的文件?注意:在您的计算机中某处存在某些文件,即使在此 C++ 源代码所在的同一目录中,也绝对没有任何证据。
  • 在 Visual Studio 中,从 ide 运行程序时的当前工作目录与项目文件的文件夹相同(除非您更改了默认值)。
  • 我有麻烦不是问题描述,除非您具体告诉我们您遇到了什么麻烦。您在这里没有解释问题。
  • 只要使用if (fobj.is_open())
  • 如果您的文件位于我上次评论中讨论的正确文件夹中,请确保其命名正确。隐藏已知文件类型的扩展名的默认 Windows 功能可能会妨碍您。也许您的文件实际上被命名为 input.txt.txt,但隐藏的扩展名使得它不容易被发现。

标签: c++ ifstream visual-studio-2019


【解决方案1】:

您正在使用相对文件路径打开文件。调用进程的“当前工作目录”可能不是您所期望的(检查GetCurrentDirectory() 以验证)。打开文件时始终使用绝对文件路径。

例如,如果文件与您的 EXE 位于同一文件夹中,请使用 GetModuleFileName() 获取 EXE 的完整路径,然后将文件名部分替换为您想要的文件名:

#include <iostream>
#include <fstream>
#include <string>

#include <windows.h>
#include <shlwapi.h>

int main()
{
    char filename[MAX_PATH] = {};
    ::GetModuleFileNameA(NULL, filename, MAX_PATH);
    ::PathRemoveFileSpecA(filename);
    ::PathCombineA(filename, filename, "input.txt");

    std::ifstream fobj;
    fobj.open(filename);

    if (fobj)
    {
        std::cout << "File Opened!\n";
    }
    else
    {
        std::cout << "File Did Not Open!\n";
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2019-11-06
    • 2020-11-09
    • 2015-01-06
    • 1970-01-01
    相关资源
    最近更新 更多