如何引用要以C++打开的文件,因为其完整路径名将因计算机而异
How to reference a file to be opened in C++ given that its full path name will change from computer to computer?
我们的计算机科学老师给了我们一个项目,使用C++制作一个功能齐全的控制台应用程序。我已经开始成功了。但我在某个时候被卡住了。我想使用 open()
函数打开一个可编辑的文本 ( .txt
) 文件。但是我为所有文本文件制作了一个单独的文件夹。通常我必须在open()
函数中提供完整的目录路径,这在我的情况下是F:WorkC++SchoolProjectTextFiles
的。但是,如果我将SchoolProject
文件夹复制到便携式驱动器中并将其带到我朋友的家中并尝试在他们的计算机中运行该程序怎么办。会起作用吗?我问是因为他们没有必要在F
目录中拥有Work
文件夹,或者他们可能根本没有F
磁盘。因此,在这种情况下,路径将发生变化。那么我必须在 open()
函数中键入什么路径,以便程序在每台计算机上运行,每次我尝试在其他计算机上运行该程序时,都不会更改open()
函数中的地址。源代码可能有助于解释。谢谢!
不应使用绝对路径,而应使用相对路径。从文件夹运行程序时,这是您的工作路径。然后,您可以通过仅将文件名或文件夹和文件名传递给 open 函数来打开此文件夹或此文件夹的子文件夹中的文件。因此,与其打开C:...
不如简单地打开someFoldersomeFile.txt
.
您可以考虑将解析的文件名作为命令行参数的一部分,如下所示:
int main(int arg, char* args[]) {
FILE *newfile = fopen( args[1], "r");
}
您不能确定所有计算机都正确映射了F:驱动器,因此最好使用通用命名约定 (UNC) 名称,即"\服务器\共享\路径\文件"。
实现相同目的的一个好方法是使用 Boost 文件系统,但这会使您的代码更加复杂,因为您依赖于外部库(阅读:学生可能会感到困惑)。Boost 文件系统的文档可在此处找到:http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 程序无法启动,因为缺少 libmpc-3.dll
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- C++ 写入路径名中包含不需要的空字符的文件
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 无法为 X.radio 创建中等可视化,因为找不到网络节点可视化 - Omnet++
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- C++ 程序不会因为内存而终止
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- 无法使用 openssl 服务器,因为密码已过时...什么的...ERR_SSL_VERSION_OR_CIPHER_MISMATCH
- "this"关键字在C++中的实现限制,因为它与危险但功能示例有关
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 如何读取指针的值,因为这个指针是函数的返回?
- 无法加载 QML 插件:无法保护模块,因为它从未注册过
- 无法使用犰狳运行编译的 cpp 代码,因为 dyld:库未加载
- system() 无法运行我的程序,因为空间
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库