在具有文件对象的编程语言中,您宁愿将此对象传递给函数还是将物理文件的路径传递给函数并让函数自己打开文件?
如果语言对您的回答很重要,请考虑 c++ 和 python。
谢谢,
某人
在具有文件对象的编程语言中,您宁愿将此对象传递给函数还是将物理文件的路径传递给函数并让函数自己打开文件?
如果语言对您的回答很重要,请考虑 c++ 和 python。
谢谢,
某人
我对良好编码实践的理解是打开要使用信息的文件,而不是在任何语言的更全局范围内。
我完全支持强类型,因此尽可能多地传递文件路径对象是有意义的。Boostboost::filesystem::path
为此目的提供了该类。
但是,这应该是无忧无虑的。例如,提供从string
to的隐式转换fileobject
(但不是反过来!)可能没有什么害处,因此接受前者的函数也将接受路径作为裸字符串(并用它做正确的事情)。
同样,Python 中的某些函数需要一个打开的文件对象,但如果您将一个实例传递str
给它,它们将通过调用open(path, 'r')
自己来构造这样一个对象。
但是,请注意,我在这里区分
ifstream
/ofstream
在 C++ 中,file
在 Python 中(不要传递这个),和boost::filesystem::path
-传递这个。相比之下,.NET 具有FileInfo
用于表示文件系统对象的类,而它使用FileStream
该类来表示……嗯,文件流。
这在很大程度上取决于具体情况。
如果我要在几个(子)函数中使用该文件,而不是传递初始化的文件对象(或函数)。
如果我有一个函数来获取文件名和路径,而另一个函数来处理文件的数据,我可能更愿意传递路径和文件名并让使用数据的函数打开文件。