下面的代码在 Visual Studio Community 2019 中正常工作,输入文件打开并被读取。
当我在 Visual Studio Code 中尝试相同的代码时,它不起作用,并返回“访问被拒绝”。
我需要使用 Visual Studio Code。
输入文件在 Visual Studio Code 的情况下在
.exe
的目录中,在 VS 社区的情况下在 .cpp
的目录中。
#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;
}
尽量给出文件的完整位置。
file.open("C\..\input.txt");
我已经花了 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 遇到问题的原因。