编译报错LNK1168:无法打开文件进行写入的问题排查
LNK1168错误:无法打开文件写入的解决方法
问题代码
#include <iostream> #include <cmath> // 原代码缺失,需添加以支持sqrt和std::round float dis; float time_; float iv; float acc = -9.8; float value; float getTime_(float disp, float iv_) { if (iv_ == 0) { dis = -disp; time_ = sqrt((2 * dis) / acc); return time_; } else { dis = disp; time_ = (-iv_ + sqrt((((iv_ * iv_) * 1000) / 1000) + (19.6 * dis))) / 9.8; return time_; } } int main() { value = 0; time_ = 0; iv = 0; dis = 0; float vod = 0.05; // 输入位移(单位:米) value = std::round(getTime_(vod, iv) * 1000.0) / 1000.0; std::cout << value << " seconds" << std::endl; return 0; }
问题描述
程序无法构建,报错:
Error: cannot open (Directory of file) for writing, LNK1168。此前通过Windows 10 CMD终止后台进程后问题暂时解决,但修改代码变量后错误再次出现。
解决方法
- 终止占用进程:打开任务管理器,找到对应项目的.exe进程,右键选择“结束任务”,之后重新编译。如果频繁出现,可在IDE预生成事件中添加自动删除旧可执行文件的命令(比如VS中项目属性→生成事件→预生成事件,添加
del "$(TargetPath)")。 - 检查文件权限:若项目放在系统保护目录(如
C:\Program Files),编译器无写入权限。将项目移至非系统目录(如C:\Users\你的用户名\Documents\Projects),确保文件夹有读写权限。 - 清理IDE缓存:清理构建缓存,比如VS中选择“生成→清理解决方案”后重新生成;其他IDE可选择对应清理缓存的选项。
- 修复代码缺失:原代码缺少
<cmath>头文件,sqrt和std::round依赖该头文件,添加后可解决潜在编译错误。
内容的提问来源于stack exchange,提问作者bananass4life
相关产品推荐
相关产品推荐

