将文件或文件名传递给函数

pass file or filename to function

本文关键字:函数 文件名 文件      更新时间:2023-10-16

在有文件对象的编程语言中,您宁愿将此对象传递给函数还是物理文件的路径,并让函数打开文件本身?

如果语言对你的答案很重要,请考虑c++和python。

谢谢,

某人

我对良好编码实践的理解是打开要使用信息的文件,而不是在任何语言中的全局范围内。

我完全支持强类型,所以尽可能多地传递文件路径对象是有意义的。Boost为此提供了boost::filesystem::path类。

然而,这应该是无障碍的。例如,提供从stringfileobject的隐式转换可能没有什么害处(但不是相反!),因此接受前者的函数也会将路径作为裸字符串接受(并对其进行正确的处理)。

同样,Python中的一些函数期望有一个打开的文件对象,但如果将str的实例传递给它,它们将通过自己调用open(path, 'r')来构造这样的对象。

然而,请注意,我在这里区分

  • 表示文件输入/输出流的对象—C++中的ifstream/ofstream,Python中的filedonotpass this around),以及
  • 表示文件系统中文件的路径的对象,例如boost::filesystem::pathdo传递该路径

相比之下,.NET使用FileInfo类来表示文件系统对象,而使用FileStream类来表示…嗯,文件

这在很大程度上取决于具体情况。

如果我在几个(子)函数中使用该文件,我宁愿传递初始化的文件对象(或函数)。

如果我有一个函数来获取文件名和路径,而另一个函数用来处理文件的数据,我可能更喜欢传递路径和文件名,并让使用数据的函数打开文件。