如何绕过Windows"烹饪"I/O?(请再来一次)

我知道我最近看到了答案,就像自从08年2月以来一样,我不能
重新找到它. :(我尝试了邮件档案等
收藏品,但是我看到的作品仍然让我不知所措.
问题:( SOS =同一旧S ...)Microsoft坚持世界的工作
即使几十年前,微软的方式被证明是错误的.在这种情况下
即使使用'rwb'和o_rdwr | o_binary在(仍在
(适当)使用.
具体:Python创建并检查了二进制文件结束:
00460:0d 1a(这是正确的)
写后
OS.LSEEK(Target,-1,2)
OS.Write(目标,记录)
预期的结果是:
00460:0d 20 .....数据字节.... 1a
但是我得到了:
00460:20 ....数据字节... 1a
这是一个字节!!! 0D必须在那里.表示结束
标题.
相同的Python程序运行与Linux中的预期.也许是因为那是
它写在哪里? :)
我寻找的是将Microsoft抬起头并做到的方法
正常工作.好吧,至少在这种情况下.
注意:这样的事情证明了python实施者绕过OS呼叫
(数据获取,数据写入)并使用BIOS Direct.记住,CPU
仅了解位模式.它没有理解"文本",
"程序","数字","指针",等等等等.
超越理解.给定的位模式意味着"做". CPU
是100%二进制.内存,存储和其余的只是一点点,重点.
图案.适当的二进制I/O是强制使用机器的.
无论如何 - 如果谁提到旗帜等
Microsoft的BS会重新介绍我将非常感谢.
steve nodeby@@hughes.net

# 回答1


诺斯曼写道:
由于您没有显示任何代码上下文,我将尝试阅读SuperPathers .....
您可能是缓冲的受害者(不要致电.flush()或.close()提交
您写入磁盘).您为什么不使用文件对象来寻找和编写?
普通文件I/O序列:
fp = open(target,'wb')
fp.Seek(-1,2)
fp.Write(记录)
通过通过操作系统.方法而不是文件实例,我认为您是
通过2个不同的I/O缓冲区访问文件.我可能在这里都错了.
-larry
# 回答2


诺斯曼写道:
我实际上不确定0x1a应该在那里做什么. 0x0d是
一个看起来像MacOS线结束的'\ r',但我似乎也记得
0x1a在某些旧系统的文本文件中用作EOF信号.无论如何,你
提到了一些"二进制文件"(不是全部吗?),所以这可能并不重要
毕竟.
那应该是os.seek_end而不是2.在任何情况下,它都会移动写作
定位到最后一个字节(-1偏移到文件末尾).
对不起,但我看不到. write()不会插入字节,而是首先
覆盖直到EOF,然后附加进一步的输出,即末尾的0x1a
仅在记录中存在时才存在.
好的,这看起来很奇怪,偏见和事实似乎
插入字节.如何提供最小的例子 ? 您不是Tao的人,这就是为什么您程序不运行的原因. ) Uli - - Sator激光GmbH geschâftsfã¼hrer:thorstenfãcking,amtsgericht hamburg hr hr b62 932(_@_ _)

标签: python

添加新评论