[英]C++ How should I send project that reads specific .txt files?
我有一个C ++项目,我想以可执行形式发送给某人。 问题是程序必须从我创建的.txt中读取(特定的分隔符)。 当前,我的程序从特定于我计算机的文件路径parseFile(“ / Users / David / Desktop / FinalProject / Store.txt”)读取;
我如何将.txt文件和可执行文件打包在一起,在哪里执行。 专门从任何人的机器上的那个.txt读取?
注意:我正在使用Xcode
更改程序以接收“文件路径”作为参数。 使用该程序编写注释(ReadMe)以指定文件格式,并在程序包中添加示例数据文件
tl; dr:如果只是将文本文件与可执行文件放在同一文件夹中,则可以使用parseFile("Store.txt");
打开它parseFile("Store.txt");
在大多数运行时实现中,都有“工作目录”的概念。 当您通过图形外壳打开可执行文件时(通过双击可执行文件或类似的操作),工作目录与可执行文件所在的目录相同。
现在,如果您尝试通过不完全限定的路径在程序中打开文件,则使用的路径将相对于工作目录。
完全限定路径是指向文件系统中单个实体的离散路径。 "/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")
,它将打开/Users/David/Desktop/FinalProject(copy)/Store.txt
。 移动到其他计算机时也是如此。
值得注意的是,如果您的二进制文件是从命令行实用程序运行的,则工作目录通常是命令行外壳程序所在的目录,而不是可执行文件的目录。 但是,C标准的一部分是main()
的第一个命令行参数应该是可执行文件的名称,并且大多数实现都为您提供了完全限定的路径。 通过一些最少的解析,您可以使用该解析来确定用作文件寻址基础的路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.