2013-11-03 52 views
4

我们的计算机科学老师给了我们一个项目,使用C++制作一个功能齐全的控制台应用程序。我已经开始做到了。但是我在某个时候被卡住了。我想用open()函数打开一个可编辑文本(.txt)文件。但是我为所有文本文件制作了一个单独的文件夹。所以我知道我必须在open()函数中提供一个完整的目录名称,在我的情况下是“F:\ My Work \ C++ \ My School Project \ Text Files”。但是,如果我将“我的学校项目”文件夹复制到pendrive中,并将其带到朋友家中,并尝试在他的计算机上运行程序,该怎么办?它会工作吗?我的意思是他没有必要在'F'目录中有'我的工作'文件夹,或者他可能没有'F'磁盘。所以在这种情况下,地址将会改变。那么,我必须输入open()函数的哪个地址,以便每次尝试在其他计算机上运行该程序时,该程序都可以在每台计算机上运行,​​而不必更改open()函数中的地址......源代码可能有助于解释...谢谢!如何打开该文件?

+4

最后有人承认问题是针对学校项目的,并且表明他已经试图找出解决方案! +1。 – smoore4

+2

在C或C++中没有“open()”函数。最好这是一个依赖于平台的底层函数,您应该使用标准库文件处理函数(例如'fopen()')。 –

回答

3

而不是使用绝对路径,你应该使用相对路径。当您从一个文件夹运行程序时,这是您的工作路径。然后,您可以通过仅将文件名或文件夹和文件名传递到打开的函数来打开此文件夹或此文件夹的子文件夹中的文件。因此,不要打开C:\...只需打开someFolder\someFile.txt

2

你可以考虑让你在解析作为命令行参数的部分文件名,如:

int main(int arg, char* args[]) { 

    FILE *newfile = fopen(args[1], "r"); 

} 

你不能确保所有计算机都具有F:驱动器映射正确所以最好使用 通用命名约定(UNC)名称,即“\ server \ share \ path \ file”。

实现此目的的一个好方法是使用Boost文件系统,但这会让你的代码更复杂,因为你依赖于外部库(阅读:学生可能会感到困惑)。在这里找到Boost Filesystem的文档:http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm