将文件或文件名传递给函数
pass file or filename to function
在有文件对象的编程语言中,您宁愿将此对象传递给函数还是物理文件的路径,并让函数打开文件本身?
如果语言对你的答案很重要,请考虑c++和python。
谢谢,
某人
我对良好编码实践的理解是打开要使用信息的文件,而不是在任何语言中的全局范围内。
我完全支持强类型,所以尽可能多地传递文件路径对象是有意义的。Boost为此提供了boost::filesystem::path
类。
然而,这应该是无障碍的。例如,提供从string
到fileobject
的隐式转换可能没有什么害处(但不是相反!),因此接受前者的函数也会将路径作为裸字符串接受(并对其进行正确的处理)。
同样,Python中的一些函数期望有一个打开的文件对象,但如果将str
的实例传递给它,它们将通过自己调用open(path, 'r')
来构造这样的对象。
然而,请注意,我在这里区分
- 表示文件输入/输出流的对象—C++中的
ifstream
/ofstream
,Python中的file
(donotpass this around),以及 - 表示文件系统中文件的路径的对象,例如
boost::filesystem::path
–do传递该路径
相比之下,.NET使用FileInfo
类来表示文件系统对象,而使用FileStream
类来表示…嗯,文件流。
这在很大程度上取决于具体情况。
如果我在几个(子)函数中使用该文件,我宁愿传递初始化的文件对象(或函数)。
如果我有一个函数来获取文件名和路径,而另一个函数用来处理文件的数据,我可能更喜欢传递路径和文件名,并让使用数据的函数打开文件。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 函数来搜索目录中的文件名
- 如何打印通话函数的行号和文件名而不是log.cpp
- 使用GetTemp文件名函数在C++上生成随机文件名
- 使用文件名作为字符串从任意souce .cpp文件中调用函数
- 如何获取函数调用的文件名和行号
- 将文件或文件名传递给函数
- 适用于短文件名的最佳字符串哈希函数
- 自由类型函数可以接受 Unicode 文件名吗?
- 在调用函数的任何位置获取文件名和函数名
- 这个函数请求用户通过循环输入文件名的错误在哪里?
- 通过类文件名调用函数
- 函数,它接受字符串和数字作为创建文件名的参数
- assert函数如何在失败时返回文件名和代码行
- 使用非英语文件名调用avio_open函数无效