我正在为编程课的初级学生准备一个关于文件的讲座。我要阐述的要点之一是文件的良好做法。
在任何编程语言中使用文件时要记住什么?
可以认为文件包含一组记录,每个记录要么是固定长度,要么以分隔符结尾。
文件通常针对顺序访问进行优化,而不是随机访问。很难将数据插入到文件的中间,而且线性处理文件(如盒式磁带)通常比随机处理文件(如“随机播放”模式下的 CD)更快。
随机存取文件通常包含固定长度的记录,其中大部分包含空白空间,使得它们比顺序存取文件大。
文件是喜怒无常且不可预测的生物。他们可以更改长度、消失、更改访问权限等。在访问之间,因此请仔细验证您的操作并检查返回码。
如果您从头(尾)读取并写入尾(头),则文件可以用作缓冲区。
冲洗你的缓冲区!
既然还没有人这么说:这应该让你的学生掌握这个主题。
我发现初级程序员经常缺乏直觉,或者在访问文件的速度方面学到了错误的教训。
非常新的程序员认为文件非常快,需要帮助理解为什么从无缓冲文件中一次读取一个字节是一个坏主意。类似地,访问目录信息可能非常慢,如果可能,应该缓存。
不幸的是,一些更有经验的程序员吸取了错误的教训,并认为一切都需要缓存在 RAM 中,否则会太慢。现代操作系统具有非常复杂的磁盘缓存,因此您第二次访问文件的同一部分时可能会明显更快。
最后,交互式程序应该在另一个线程中执行所有文件操作,因此当磁盘繁忙或远程卷暂时不可用时,您的应用程序不会慢到爬行或停止工作。
完成后请记住关闭它们。
与任何其他输入一样,文件会增加安全风险。此外,它可能是格式错误的,要么是因为它是由过时的应用程序创建的,要么是因为最终用户试图自己修改它们。
要么完全忽略这样的文件,要么尽可能多地获取并丢弃其余文件。
完成后,请始终关闭文件并处理所有资源。
在二进制文件上使用读取二进制文件并在文本文件上读取。(不记得有多少次我帮助那些代码没有读取整个文件的人,因为他们正在读取带有文本结构的二进制文件,并且文件中间恰好有一个 ^Z)。
做:
不:
如果您正在编写服务器端或并发代码,请密切注意文件锁定:太少会导致数据损坏,太多会导致应用程序死锁。
Vista 在程序目录中有新的权限内容,因此创建文件的程序在安装在 vista 上时可能会出现问题(易于修复但同样烦人)。