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