文件是否需要在C / C ++中使用open()打开扩展名?

时间:2012-01-22 10:00:05

标签: c++ c

我正在为学校编写一个使用Xcode的程序,需要我们使用open()系统调用。我做了 int input_file_desc = open(input_path, O_RDONLY);
printf("input file desc %d:\n", input_file_desc);

它出现-1。文件的路径是〜/ data_to_read。我在xcode中设置了命令行参数。 input_path是我从命令行获得的const char *。出于某种原因,如果我将文件名和命令行参数更改为〜/ data_to_read.txt,它可以正常工作。如果需要更多信息,请与我们联系。感谢。

编辑:我只用.txt尝试过来看看是不是问题,但我仍然不知道为什么它首先需要扩展。你可以拥有没有扩展名的文件吗?在这种情况下它应该仍然有效,只要文件路径和参数都没有扩展名,对吧?

4 个答案:

答案 0 :(得分:2)

看起来你正在使用C,为什么C ++标签呢?是允许的吗? C ++中有简单易用的类来操作文件。

但是你肯定需要在文件名(input_path)中包含扩展名,因为同一目录中可以存在多个具有相同名称和不同扩展名的文件,那么应该打开哪一个?

编辑:应该知道文件扩展名(特别是在类UNIX操作系统中)只是一个“帮助”的东西,它们并不是真正必要的。例如,您可以拥有一个包含C ++代码但没有.cpp扩展名的文件,例如它的名称foo只有没有扩展名(或者甚至有像foo.bar这样的疯狂扩展名)。你仍然可以使用g ++来编译它,因为只要内容对使用该文件的应用程序有效,扩展就不是很重要。

答案 1 :(得分:1)

我理解你的问题的方式,你问的是文件是否需要通过C open函数打开扩展名,对吧?答案是否定的。 C对您没有任何魔力,并将尝试使用您指定的确切文件名打开文件。如果文件有扩展名,则必须在api中指定,如果不是,则不应该。

检查errno变量中返回的错误代码(使用strerror或perror获取人类可读的错误消息)以找出错误。这应该指向正确的方向。

答案 2 :(得分:1)

正如其他人所说,扩展只是名称的一部分。

您遇到的问题可能是因为您的操作系统是Windows而且微软公司的人员有默认的“隐藏”扩展名的愚蠢想法,因此您的文件似乎被命名为“test”,而实际上它被命名为“test”。 txt“因为它是用记事本创建的。

在Windows系统上看到名为“foo.txt.txt”的文件也很常见,因为隐藏/显示/猜测/自动添加扩展程序这个完全愚蠢的想法根本不能正常工作。

您可以在计算机上设置首选项,以便始终显示文件扩展名,这是在Windows系统上最好的操作。如果您对编程感兴趣,可以考虑将编程切换到像linux这样对程序员不那么恶劣的环境。

答案 3 :(得分:0)

文件名不需要扩展名 - 文件可以称为“data_to_read”。但是系统上的大多数文件名都有扩展名,只是Windows资源管理器会将它们隐藏起来。要从程序中打开文件,您需要指定此扩展名。

在Windows资源管理器中右键单击文件,然后选择“属性”以查明文件名是否具有扩展名。或者查看Windows命令提示符控制台中的文件。