Visual Studio 2015中C++作业使用fopen_s时遇stream错误求助
搞定VS2015里文件打开的
stream != nullptr/stream.valid()错误 嘿,我来帮你捋捋这个问题。首先你给出的代码用的是C标准库的fopen_s,但你提到的错误提示更偏向C++流类的问题——不过先从你的代码本身开始排查:
你的代码可能踩的坑
- 相对路径的陷阱:你写的
"input.txt"是相对路径,VS2015默认的程序工作目录是项目的Debug(或Release)文件夹,不是你放.cpp文件的源码目录。如果你的input.txt没放在这个目录下,fopen_s肯定打不开。 - 没深挖错误原因:你只判断了
err == 0,但其实可以打印具体错误信息,帮你精准定位是找不到文件、权限不够还是其他问题。 - 遗漏文件关闭:虽然现在只是测试打开,但养成用完文件就
fclose的好习惯能避免后续潜在问题。
给你调整后的代码,加上错误信息打印
#include "stdafx.h" #include <string.h> // 要包含这个头文件才能用strerror_s FILE *data; int main(void) { errno_t err; err = fopen_s(&data, "input.txt", "r"); if (err == 0) { printf_s("文件成功打开啦!\n"); // 用完记得关闭文件 fclose(data); } else { char errMsg[256]; strerror_s(errMsg, sizeof(errMsg), err); printf_s("打开文件出错啦:%s\n", errMsg); } return 0; }
另外,你提到的stream相关错误,会不会是之前用了C++的ifstream?
如果是用C++流的话,错误排查逻辑类似,给你一个示例参考:
#include "stdafx.h" #include <fstream> #include <iostream> int main() { std::ifstream inputFile("input.txt"); // 检查文件是否成功打开 if (!inputFile.is_open()) { std::cerr << "哎呀,文件打不开!" << std::endl; return 1; } // 这里可以写读取文件的逻辑 inputFile.close(); return 0; }
快速解决路径问题的两种方法
- 最直接的:把
input.txt直接复制到项目的Debug文件夹里(右键你的项目→打开文件夹→找到Debug目录,把文件放进去)。 - 更灵活的:在VS里设置工作目录:右键项目→属性→配置属性→调试→工作目录,改成你存放
input.txt的绝对路径(比如C:\Users\你的用户名\Desktop)。
内容的提问来源于stack exchange,提问作者Codos
相关产品推荐
相关产品推荐

