我有一个c ++项目,我想发送给可执行形式的人。问题是程序必须从我创建的.txt(特定的分隔符)中读取。目前我的程序从特定于我的计算机的文件路径读取, parseFile( “/用户/大卫/桌面/ FinalProject / Store.txt”);
如何将.txt文件和可执行文件打包在一起,exec。在任何人的机器上专门从那个.txt读取?
注意:我正在使用Xcode
答案 0 :(得分:2)
将程序更改为接收“文件路径”作为参数。使用程序编写注释(ReadMe)以指定文件格式,并使用包
添加样本数据文件答案 1 :(得分:0)
tl; dr:如果您只是将文本文件放在与可执行文件相同的文件夹中,则可以使用parseFile("Store.txt");
在大多数运行时实现中,都有一个"工作目录的概念。"当您通过图形shell打开可执行文件时(通过双击它或其他类似的效果),工作目录与可执行文件所在的目录相同。
现在,如果您尝试通过不完全限定的路径在程序中打开文件,那么使用的路径将相对于工作目录。
完全限定路径是指向文件系统中单个实体的离散路径。 "/Users/David/Desktop/FinalProject/Store.txt"
就是这样一个例子,因为它从根目录开始(在{nix上为/
,在Windows上为DriveLetter:\
),并准确说明需要遍历哪些目录才能到达您的文件。
不完全限定的路径(基本上意味着它不会从文件系统的根目录开始)可用于执行相对文件寻址。大多数运行时都会假设任何不完全限定的路径都是相对于工作目录的,这基本上意味着实际打开的路径是将提供的路径连接到结尾的结果工作目录。
例如,如果您打开存储为/Users/David/Desktop/FinalProject/a.exe
的二进制文件,则工作目录将设置为/Users/David/Desktop/FinalProject/
。如果您的程序尝试打开"Store.txt"
,则运行时会发现您正在尝试打开一个不完全限定的路径,因此它会假设您打算相对于该路径打开一个文件工作目录,然后是/Users/David/Desktop/FinalProject/
+ Store.txt
,即/Users/David/Desktop/FinalProject/Store.txt
。
关于这一点的好处是,如果移动二进制文件,工作目录也会移动。如果您将a.exe
与Store.txt
一起移动到/Users/David/Desktop/FinalProject(copy)/
,那么当您打开/Users/David/Desktop/FinalProject(copy)/a.exe
时,工作目录现在将是/Users/David/Desktop/FinalProject(copy)/
,现在当您致电parseFile("Store.txt")
时{1}},它会打开/Users/David/Desktop/FinalProject(copy)/Store.txt
。移动到其他计算机时也是如此。
值得注意的是,如果您的二进制文件是从命令行实用程序运行的,则工作目录通常是命令行shell所在的目录,而不是可执行文件的目录。但是,作为C标准的一部分,main()
的第一个命令行参数应该是可执行文件的名称,并且大多数实现为您提供完全限定的路径。通过一些最小的解析,您可以使用它来确定用作寻址文件的基础的路径。