问题描述
我遇到了许多语言的问题,最近一次是C ++。
示例问题
假设我们正在使用C ++,并且具有以下项目文件结构:
("Project" main folder with three [modules,data,etc] subfolders)
现在说:
所以我目前的方式是假设 maincode.cpp
在 Project 文件夹中进行编译和执行,然后 hardcode data/data.txt
中的路径moduleA.cpp
进行读取(例如我使用fstream fs("data/data.txt")
进行读取)。
但是如果由于某种原因该代码在etc
文件夹中执行怎么办?
有办法解决吗?
问题
如果我错过了问题图示的任何重要细节,请发表评论!
解决方法
在某些时候,程序必须假设文件在哪里。通过从用户输入获取它,或者通过带有假定文件名的相对路径获取它。正如评论中已经说过的那样,C ++最近在C ++ 17中添加了std::filesystem
,可以帮助您制作与主机文件系统交互的跨平台代码。
话虽这么说,每个程序,无论大小,都必须在某些时候做出某些假设,如果程序要求它们以特定名称位于某个位置,则删除或移动某些文件对于任何程序都是有问题的。除了向用户显示错误消息等之外,这是无法解决的。
,如果您知道程序始终相对于可执行文件,或者您使用诸如“ C:\ myProgram \ data \ data.txt”之类的绝对路径,则您的程序可以从主调用中的argv[0]
推导出路径。 。
第二种方法适用于每种语言。
正如@Hatted Rooster所说,在不作某些假设的情况下,通常无法解决某些任意文件,但是有些框架允许您将某些文件“存储”在可执行文件(或其他文件)中。这些框架通常允许您以不透明的方式处理此类文件,而无需依赖当前的工作目录或相对路径。
例如,请参见the Qt Resource System。