C程序文件读写技术
这是我第一次创建一个包含文件读写的程序。事实上,我想知道做这件事最好的技巧是什么。因为当我把我的工作和我的同学比较时,我们的逻辑是非常不同的 你看,我们的老师让我们做一个简单的学生名单系统,用户可以添加、编辑和删除记录。他要求我们制作一个文件来保存所有记录,以便我们下次使用该程序时可以访问它 我解决这个问题的方法是,在程序打开菜单之前,我读取其中的所有记录并将其保存在数组[]中。通过这样做,我可以操纵所有记录。然后在用户退出程序之前,我将其保存在同一个文件中,并覆盖其中的所有记录 我同学的答案是这样的。添加记录时,她访问文件并附加数据;编辑记录时,她访问文件并编辑特定记录;删除记录时,她访问文件并删除记录。所以她做的每一个功能都是访问文件 当然,我们的两项工作都可以进行编码。但我想知道,如果我们处理数千或数百万条记录,使用哪一条更有效。或者还有比我们做的更好的解决方案吗。也许你可以和我们分享你的文件处理经验。。。谢谢。您的版本(将所有记录保存在内存中)可能会更快。如果记录计数增加,则需要有足够的内存。这样做的坏处在于,程序崩溃或不正确的退出会使您丢失所有数据,因为这些数据从未保存到文件中C程序文件读写技术,c,file,input,large-data,C,File,Input,Large Data,这是我第一次创建一个包含文件读写的程序。事实上,我想知道做这件事最好的技巧是什么。因为当我把我的工作和我的同学比较时,我们的逻辑是非常不同的 你看,我们的老师让我们做一个简单的学生名单系统,用户可以添加、编辑和删除记录。他要求我们制作一个文件来保存所有记录,以便我们下次使用该程序时可以访问它 我解决这个问题的方法是,在程序打开菜单之前,我读取其中的所有记录并将其保存在数组[]中。通过这样做,我可以操纵所有记录。然后在用户退出程序之前,我将其保存在同一个文件中,并覆盖其中的所有记录 我同学的答案是
你的同学版本不会那么快,因为文件io不是你能做的最快的。但是它需要更少的内存,在崩溃时更安全,因为大多数数据都已经在文件中。在任何严肃的应用程序中,一个好的程序员可能会使用现有的库来管理数据。选择此工具取决于具体要求:
存储大量信息的最常见选择是基于SQL的数据库,如MySQL、Postgres、Microsoft SQL Server、SQLite等。这些数据库与同学的解决方案相比,更像同学的解决方案。这是一个无法回答的问题,如果不知道运行它的系统的详细信息,数据集的大小,以及开发时间与cpu时间的相对成本。如果系统有足够的内存,则最好在ram中处理副本。在一个ram非常有限的小型系统中(目前主要存在于嵌入式应用程序中),您可能需要更新磁盘文件。其他需要考虑的事情是,在实际写入磁盘之前,操作系统可能会进行任何缓冲,如果程序崩溃,文件的一致性会发生什么情况,甚至写入磁盘是“昂贵的”,因为写入速度非常慢或写入周期有限(一些闪存磁盘技术) 如果在今天的台式计算机上这是一个小的实际问题,你可能还需要考虑在不同的时间上开发各种解决方案的时间。
此外,今天最好使用一个擅长处理相关问题的现有数据库来解决问题,而不是在文件系统中创建自己的数据库。这是一个在编程中会反复遇到的经典案例:我是否优化了速度或内存使用? 而且,像所有这些难题一样,没有“正确”的答案或完美的解决方案。换句话说,你和你的同学在解决问题上都是正确的 通过将所有记录加载到内存中的解决方案,您可以“花费”内存,以便在运行时更快地访问和修改这些记录。将所有记录存储在内存阵列中会占用空间,但由于内存访问几乎比磁盘访问快无穷多,因此您的方法将比您的同学的方法运行得快得多 相比之下,你的同学通过等待从硬盘按需加载数据来节省RAM。但这会让她付出代价:与获取已经存储在内存中的数据相比,访问硬盘是一个极其昂贵的过程,每次用户做出更改时,她都会被困在这一过程中。想想启动一个程序需要多长时间,而不是切换到一个已经打开的程序 这就是折衷。以下是一些需要问问自己的重要问题: