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

时间:2012-07-25 12:29:55

标签: c++ python coding-style

在具有文件对象的编程语言中,您是希望将此对象传递给函数还是物理文件的路径,并让函数自己打开文件?

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

谢谢,

有人

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我都是强力打字,所以尽可能多地传递文件路径对象是有道理的。为此,Boost提供了boost::filesystem::path类。

但是,这应该没有麻烦。例如,提供从stringfileobject的隐式转换可能没有什么害处(但不是相反的方式!)因此接受前者的函数也会接受路径为裸字符串(和做正确的事情)。

同样,Python中的某些函数需要一个打开的文件对象,但是如果你将str的实例传递给它,他们只需通过调用open(path, 'r')来构造这样的对象。

但请注意,我在此区分

  • 表示文件输入/输出流的对象 - C ++中的ifstream / ofstream,Python中的file执行传递此信息)和
  • 表示文件系统中文件的路径的对象,例如, boost::filesystem::path - 执行传递

为了进行比较,.NET有FileInfo类用于表示文件系统对象,而它使用FileStream类来表示... well,文件 stream

答案 2 :(得分:0)

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

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

如果我有一个函数来获取文件名和路径而另一个函数对文件的数据执行某些操作,我可能更喜欢传递路径和文件名,并让使用该数据的函数打开文件。 / p>