fstream 不读取输入的 Visual Studio 代码,但它在 Visual Studio Community 中工作

问题描述 投票:0回答:2

下面的代码在 Visual Studio Community 2019 中正常工作,输入文件打开并被读取。

当我在 Visual Studio Code 中尝试相同的代码时,它不起作用,并返回“访问被拒绝”。

我需要使用 Visual Studio Code。

输入文件在 Visual Studio Code 的情况下在

.exe
的目录中,在 VS 社区的情况下在
.cpp
的目录中。

VS社区截图:

VS代码截图:

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

using namespace std;

int main()
{
    fstream file;
    string word;
    file.open("input.txt");
    getline(file, word);

    if (file.is_open() == true)
        cout << "access aproval" << endl;
    else
        cout << "access denied" << endl;

    cout << word << endl;
}
c++ string visual-studio-code fstream ifstream
2个回答
0
投票

尽量给出文件的完整位置。

file.open("C\..\input.txt");


-1
投票

我已经花了 4 个多小时进行测试,我认为问题出在您使用的编译器上。

我在 Visual Studio Code 中使用 MinGW64,除了 fstream 奇怪的检测文件行为外,创建一个 fstream 对象会删除在它之前声明的任何变量值。 MinGW64 是有问题的编译器,因此使用 UCRT64 解决了这个问题,使其像 Visual Studio Community 一样正确运行

我已经在命令行(CMD / PowerShell)(使用 PATH 环境变量中的 MinGW64)上通过构建程序进行了测试

g++ [sourceFile].cpp -o [executableFile].exe

并运行它

.\[executableFile].exe

发现问题依旧,所以不是Visual Studio Code的问题而是编译器的问题


根据这个 stackoverflow 线程,MSYS2 环境的使用, “MINGW64 很旧并且经过了时间考验。 UCRT64 是新的。 UCRT64 在文件路径中支持 UTF-8(MINGW64 需要解决方法)。我相信两者都不兼容 MSVC(对于 C++,可能与 C 兼容),但这通常无关紧要。”

“MinGW64 使用旧的 MSVCRY 技术。”

我认为 UCRT64 支持 UTF-8 文件路径的事实可能是它可以很好地处理 fstream 等 IO 流而 MinGW64 遇到问题的原因。

© www.soinside.com 2019 - 2024. All rights reserved.