下面的代码在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;
}
2条答案
按热度按时间dwbf0jvd1#
尝试给予文件的完整位置。
file.open("C\..\input.txt");
ljo96ir52#
我已经花了4个多小时来测试,我认为问题出在你使用的编译器上。
我在Visual Studio代码中使用MinGW 64,除了fstream在检测文件时的奇怪行为外,创建fstream对象会删除在它之前声明的所有变量值。MinGW 64是一个有问题的编译器,因此使用UCRT 64修复了这个问题,使它像Visual Studio社区一样正确运行
我已经在命令行(CMD / PowerShell)(PATH环境变量中使用MinGW 64)上测试过了,方法是使用
然后用
并发现问题仍然存在,所以这不是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遇到了问题。