【发布时间】:2014-11-27 19:05:13
【问题描述】:
对于我的一项作业,我必须阅读一个文件(约 100 行)。 为了操作文件的内容并提取所有行,我使用函数 stat 分配了一个具有文件大小的缓冲区。我用这个缓冲区读取的函数读取了文件。 有人告诉我这个方法很脏。
为什么它被认为是脏的?我认为如果文件很短,这意味着 char 数组的大小是可以接受的,这意味着只有几个系统调用??
【问题讨论】:
-
你应该问问那些说这个方法很脏的人。
-
我应该问的。现在为时已晚。
-
我认为您应该先检查该文件是否为常规文件。同样的功能
stat可以告诉你。除此之外,您可以安全地使用 stat 检查文件大小。请参阅man ---struct stat. st_size--- 对于常规文件,文件大小以字节为单位。对于符号链接,符号链接中包含的路径名的字节长度。 -
关于您的尺寸问题,How do you determine the size of a file in C? 提供了各种方法和权衡分析,无需再次编写-仅在存在错误信息时更正。所以我标记为重复。关于复制——如果这是你的目标——见this question
-
另一个可以认为
"dirty"的原因是因为一次读取整个文件会将所有end of line characters读入缓冲区而无需翻译。 (例如所有newlines(如果在 DOS/Windows 上carriage returns))。