编写关键文本数据的技巧

时间:2008-11-15 16:19:01

标签: delphi windows-xp mission-critical

我们在昂贵的实验中长期(〜天)使用text / csv这样的数据,因此不惜一切代价避免文件损坏。

最近,在实验过程中,XP中的资源管理器复制了一个文件,数据部分丢失,可能是由于多次访问冲突。

有哪些好方法可以避免这种损失? - 我们在Windows XP系统上使用Delphi。

我们提出的一些想法如下所示 - 我们欢迎您提出意见和建议。

8 个答案:

答案 0 :(得分:9)

使用数据库作为辅助数据存储机制并利用原子事务机制

答案 1 :(得分:6)

如何将大文件拆分成单独的文件,每天一个。

答案 2 :(得分:1)

如果这些计算机在网络上:将带有日志记录数据的HTTP帖子发送到Web服务器。 (发送UDP数据包会更简单)。

确保您只复制旧数据。如果文件名的时间戳分辨率为1小时,则可以安全地复制超过1小时的数据。

答案 3 :(得分:0)

如果写入失败,请将结果缓存以便稍后写入 - 因此,如果在外部打开文件,则数据仍然存储在内部,或甚至可以存储到磁盘

答案 4 :(得分:0)

我认为您正在寻找的是Win32 CreateFile API,并带有以下标志:

FILE_FLAG_WRITE_THROUGH:写操作不会通过任何中间缓存,它们将直接进入磁盘。

FILE_FLAG_NO_BUFFERING:正在打开文件或设备,没有系统缓存进行数据读写。此标志不会影响硬盘缓存或内存映射文件。 使用FILE_FLAG_NO_BUFFERING标志成功处理使用CreateFile打开的文件有严格的要求,有关详细信息,请参阅文件缓冲。

答案 5 :(得分:0)

每个实验都使用“工作”文件和“完成”文件。工作文件专门打开,完成文件复制到网络上的某个位置。接收机器上的应用程序将该文件提供给数据库。如果资源管理器尝试移动或复制工作文件,则会收到“拒绝访问”错误。

'工作'文件将在一段时间后(例如,6月12日/ 24小时或任何时段)变为“已完成”。所以它创建了另一个工作文件(名称必须包含时间戳)并通过网络发送'done'(或者人类可以做到这一点,如果我正确理解你的文本,你实际上在做什么)。

在使用中复制文件是要求它被破坏。

答案 6 :(得分:-1)

将数据写入隐藏目录中的缓冲区文件,并定期将数据复制到“公共”数据文件(例如,每10个点),从而减少写入并提供备份

答案 7 :(得分:-1)

离散地写入数据点,即为每个数据点写入打开和关闭文件句柄 - 如果数据点之间的时间较短,这会减少文件被访问的时间