c++ fstream不读取输入的Visual Studio代码,但它在Visual Studio社区中工作

bqjvbblv  于 2023-03-25  发布在  其他
关注(0)|答案(2)|浏览(219)

下面的代码在Visual Studio Community 2019中正常工作,输入文件打开并被读取。
当我在Visual Studio Code中尝试相同的代码时,它不起作用,并返回“拒绝访问”。
我需要使用Visual Studio Code。
对于Visual Studio Code,输入文件位于.exe的目录中;对于VS Community,输入文件位于.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;
}
dwbf0jvd

dwbf0jvd1#

尝试给予文件的完整位置。file.open("C\..\input.txt");

ljo96ir5

ljo96ir52#

我已经花了4个多小时来测试,我认为问题出在你使用的编译器上。
我在Visual Studio代码中使用MinGW 64,除了fstream在检测文件时的奇怪行为外,创建fstream对象会删除在它之前声明的所有变量值。MinGW 64是一个有问题的编译器,因此使用UCRT 64修复了这个问题,使它像Visual Studio社区一样正确运行
我已经在命令行(CMD / PowerShell)(PATH环境变量中使用MinGW 64)上测试过了,方法是使用

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

然后用

.\[executableFile].exe

并发现问题仍然存在,所以这不是Visual Studio代码问题,而是编译器问题。
根据这个堆栈溢出线程usage of MSYS2 environments,“MINGW 64是老的,经过时间的考验。UCRT 64是新的。UCRT 64在文件路径中支持UTF-8(MINGW 64需要变通方法)。我相信两者都不兼容MSVC(对于C++,可以兼容C),但这通常不重要。”
“MinGW 64使用旧的MSVCRY技术。”
我认为,UCRT 64支持UTF-8文件路径的事实可能是它处理像fstream这样的IO流的原因,而MinGW 64遇到了问题。

相关问题