问题可能看起来重复。但我没有得到我正在寻找的答案。
问题是,在unix中,4GL二进制文件之一是使用游标从表中获取数据并将数据写入.txt文件中。
该表包含大约5000万条记录。
二进制文件花了很多时间而没有完成。 .txt
文件也是0字节。
我想知道为什么记录不会写在.txt
文件中。
注意:有足够的可用磁盘空间。 此外,对于3000万条记录,我可以按照预期获得.txt文件中的数据。
答案 0 :(得分:3)
您提供的信息不足以确定文件未写入的原因。
在UNIX中,文本文件就像任何其他文件一样 - 一个字节集合。没有对“行大小”或“行数”强制执行特定限制(或结构),但显然,某些程序可能对最大支持行大小等具有某些限制(取决于它们的实现)。
当程序开始将数据写入文件时(即第一次刷新内部缓冲区),文件将不再是零大小,所以很明显你的binqary正在做其他事情(除非它消失了)该文件作为清理的一部分。)
尝试通过strace
运行您的可执行文件以查看文件I / O活动 - 这将提供有关正在发生的事情的一些线索。
答案 1 :(得分:0)
不确定这是否可以解决您的问题。但我几次遇到过这样的情况,几乎在所有情况下,问题都是刷新输出。特别是在java中,通常编写数据的最佳实践涉及缓冲区。因此,当达到缓冲区限制时,它将被写入文件,但是当程序关闭时,其余数据不会写入文件,而不会刷新缓冲区编写器。
如果你有源代码或者可以以某种方式安排它,那么你可以选择检查编写器刷新的来源,也可以修改它以便它适用于你的情况