delphi – 如何编写正在读取的文件?
我的应用程序缓慢地读取浮点数的TextFile.有时情况会发生变化,并且必须重写文件.一些示例代码:
procedure TAMI_Column_Selector.read_continuously (file_name: string); var infile: TextFile; f: Double; begin AssignFile (infile,file_name); Reset (infile); try while not EOF (infile) do begin Read (infile,f); process (f); // this may take quite some time,seconds or even minutes end; // while finally CloseFile (infile); end; // try..finally end; // read_continuously // 如何编写一个可供阅读的文件?进一步来说: >如何编写一个可供阅读的文件? 我想我可以解决第一个问题是将文件读入内存并读取(是否有可以写入内存并从内存中读取的TextFile)?然后仍然是我如何测试文件已被写入. 有没有(优雅)解决这个问题的人? 提前致谢. 在Windows 7上使用Delphi XE 解决方法
要写入一个也可以阅读的文件,作者通常不需要做任何特别的事情.如果打开文件的其他人都允许写入文件,那么目标编写者可以打开文件进行写入,写入文件并关闭它.如果其他人不允许写入文件,那么首先不允许目标编写者打开文件,并且它无能为力.
如何在允许写入的同时打开文件进行读取取决于所使用的打开方法.对于CreateFile,dwDesiredAccess参数是常用的GENERIC_READ,dwShareMode参数是FILE_SHARE_READ或FILE_SHARE_WRITE.如果您正在使用TFileStream,那么构造函数的mode参数应该是fmOpenWrite或fmShareDenyNone.如果您正在使用AssignFile和Reset,那么您需要设置FileMode全局变量,但这不支持任何共享模式,因此您不能使用Pascal样式的I / O. 读取同时写入的文件本身并不会导致崩溃.它肯定不会在操作系统级别引起问题.如果你的程序崩溃了,那是因为没有编写它来预测读取失败.当您阅读某些内容时,请检查API结果以确认您读取了所请求的字节数.您还可以让读写应用程序相互通信.您可以使用同步对象来序列化对文件的访问,或者编写器可能会向读取器发送信号以指示文件已更改,并且先前的读取可能不再准确.由您来处理细节. 如果读者要在内存中保留文件的副本,那么它可能不需要费心共享写访问权限.相反,它可以打开文件,只共享读访问权限,在内存中制作文件的副本,然后关闭文件.然后,编写者可以打开文件,而不必担心阅读器进程,因为没有什么可以践踏.它可以通知读者更改了某些内容,并且读者可以重新加载整个文件或只加载更改的部分. (作者将不得不告诉读者哪个部分发生了变化;如果不读取整个文件并查看它与内存副本的区别,读者就没有其他方法可以检测到它.) 保持写入不干扰读取的另一种方法是使用事务.不过,Transactional NTFS正在逐步淘汰. Microsoft已发布a list of alternatives,因此您可以尝试查找符合您需求的内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |