找回密码
 加入
搜索
查看: 5629|回复: 17

FileWrite函数怎么写入Binary类型的变量?

[复制链接]
发表于 2008-11-5 14:36:40 | 显示全部楼层 |阅读模式
$file = FileOpen("tmp.txt", 18)             ;已经开了二进制和写入模式,试了17也不行
If $file = -1 Then
    MsgBox(0, "错误", "无法打开目标文件。")
    Exit
EndIf

$chars = FileRead($file)                     ;可以读出为 0x123 的十六进制形式的字符
$test = StringReplace($chars, "B2CBB5A5", "D4ADB0E6", 1)            ;替换一次指定的字符
FileWrite($file, $test)                     ;写入无效,最后文件变成空的了,没内容了。
FileClose($file)
请看上面的代码。AU3的代码格式无法点,只好手工用[code]了。
我想用一段十六进制的字符替换指定的一段字符,可是经 stringReplace 后得到的正确的内容(类似 0x123,不过也试了去掉 0x 然后写入也不行),却无法用 FileWrite 写入,不知道直接写入十六进制的字符要怎么办?我看了帮助应该是支持的,不知道哪里出错了。我在论坛上搜索了也找不到相关内容,只好发帖来问,请帮忙!

解决办法:见14#。当要读取的时候,FileOpen一次;要写入的时候,必须再次 FileOpen 一次。真是晕死。

[ 本帖最后由 thackit 于 2008-11-5 20:43 编辑 ]
 楼主| 发表于 2008-11-5 14:42:28 | 显示全部楼层
If the line is a binary type variant (and not text) it will be written to the file byte by byte. Binary operation can also be forced by using Fileopen with the binary flag.

FileWrite 函数的说明里有提到可以写入二进制的数据,我也打开了 FileOpen 的相关模式了啊。
发表于 2008-11-5 15:59:33 | 显示全部楼层
$test = StringReplace("B2CBB5A5", $chars, "D4ADB0E6", 1)
 楼主| 发表于 2008-11-5 16:51:20 | 显示全部楼层
StringReplace我的没问题啊,楼上的才是错的吧?
我想问的是怎么写入经过 StringReplace 后得到的 16进制 的字符串?
发表于 2008-11-5 16:52:42 | 显示全部楼层
原帖由 thackit 于 2008-11-5 16:51 发表
StringReplace我的没问题啊,楼上的才是错的吧?
我想问的是怎么写入经过 StringReplace 后得到的 16进制 的字符串?

好像有转换函数的!
 楼主| 发表于 2008-11-5 17:08:45 | 显示全部楼层
原帖由 liongodmien 于 2008-11-5 16:52 发表

好像有转换函数的!

晕!我的 $test 变量已经是 Binary 类型的数据。
现在的问题是如何写入文件啊?
发表于 2008-11-5 17:35:37 | 显示全部楼层
直接写(替换)就可以了,我试过了
发表于 2008-11-5 17:41:17 | 显示全部楼层
$chars=FileRead("c:\1.txt")
$test = StringReplace( $chars,"B2CBB5A5", "D4ADB0E6", 1)

这段我瞎写的

[ 本帖最后由 netegg 于 2008-11-5 17:42 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2008-11-5 17:42:33 | 显示全部楼层
楼上的请教怎么写代码?我写的错在哪里?请说的清楚一点好吗,这里先谢了。我今天刚接触AU3。。。

FileWrite($file, $test)        ;错在哪里呢?
 楼主| 发表于 2008-11-5 17:49:32 | 显示全部楼层
8楼的到底是些什么啊!
我不要替换啊,我要写入文件,无语。。。。
发表于 2008-11-5 17:49:49 | 显示全部楼层
原帖由 thackit 于 2008-11-5 17:42 发表
楼上的请教怎么写代码?我写的错在哪里?请说的清楚一点好吗,这里先谢了。我今天刚接触AU3。。。

FileWrite($file, $test)        ;错在哪里呢?

错在FileOPen($File, 18)
发表于 2008-11-5 17:52:19 | 显示全部楼层

$file = FileOpen("tmp.txt", 16)             ;已经开了二进制和写入模式,试了17也不行
If $file = -1 Then
    MsgBox(0, "错误", "无法打开目标文件。")
    Exit
EndIf

$chars = FileRead($file)                     ;可以读出为 0x123 的十六进制形式的字符
$test = StringReplace($chars, "B2CBB5A5", "D4ADB0E6", 1)            ;替换一次指定的字符
FileWrite($file, $test)                     ;写入无效,最后文件变成空的了,没内容了。
FileClose($file)
 楼主| 发表于 2008-11-5 18:08:02 | 显示全部楼层
楼上的说得这么肯定,肯定没有自己测试过。我第一次也是用16的。

16+0=16是开启读取 Binary 的只读模式,要 16+1 or 16+2 才是可写入模式。

改成只读模式,更不能写入了。
发表于 2008-11-5 19:25:49 | 显示全部楼层
原帖由 thackit 于 2008-11-5 18:08 发表
楼上的说得这么肯定,肯定没有自己测试过。我第一次也是用16的。

16+0=16是开启读取 Binary 的只读模式,要 16+1 or 16+2 才是可写入模式。

改成只读模式,更不能写入了。

不好意思,刚才没细看,不过,用18的确是不行的,因为一开始就已经把内容清空了!

$file = FileOpen("tmp.txt", 16) 
If $file = -1 Then
    MsgBox(0, "错误", "无法打开目标文件。")
    Exit
EndIf

$chars = FileRead($file)  
$test = StringReplace($chars, "30303030", "D4ADB0E6", 1) 
FileClose($file)
FileOpen('tmp.txt', 18)
FileWrite($file, $test) 
 楼主| 发表于 2008-11-5 19:54:38 | 显示全部楼层
不是在读取的时候清空文件内容,而是在要写入的时候先清空文件内容,然后用替换过的文件内容写入进去,这样才达到修改的目的。用17的话,就是在文件末尾追加数据,会增大文件大小的。
其实17或18都不关键。关键是怎么写入 Binary 类型的数据。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-2 08:50 , Processed in 0.078417 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表