找回密码
 加入
搜索
查看: 4488|回复: 11

怎么样读取文件(一些exe,jpg等)(非二进制方式)

  [复制链接]
发表于 2009-11-30 21:44:07 | 显示全部楼层 |阅读模式



类似这个exe文件,用文本工具读取出来的内容
使用au3的fileread没效(仅仅读取到几个字符而已)(貌似以前的版本OK?反正现在的版本是读取不了,二进制没问题,但我不需要二进制)
请教高手,怎么样才可以类似文本工具一样直接读取到这些文件,使用于POST

像这样:




请教各位高手给支个招~谢谢!

本帖子中包含更多资源

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

×
发表于 2009-11-30 22:05:43 | 显示全部楼层
用FileRead读取实际是全部读取出来了,但读取的数据中因为有NULL字符而显示不全。
测试以下代码便知,NULL字符之后的数据不会显示出来:
Msgbox(0, "", "a" & Chr(0) & "b")

解决方式是把NULL字符替换为其他字符,用DllStruct*系列的函数就可以做到了。
 楼主| 发表于 2009-12-1 00:12:50 | 显示全部楼层
本帖最后由 破帽遮颜 于 2009-12-1 00:15 编辑



pusofalse超版,有没具体点的方案?

如果说仅仅只是不显示倒也无所谓,问题是根本读取不了!
类似如此:

ClipPut(FileRead(@ScriptDir & '\工作进度.XLS'))

粘贴到文本后仅仅只是显示:"邢唷?"
发表于 2009-12-1 00:56:05 | 显示全部楼层
试下这样:
$sFile = "cmd.exe"

$hFile = FileOpen($sFile, 16)
$bBinary = FileRead($hFile)
FileClose($hFile)

$iSize = BinaryLen($bBinary)
$tBinary = DllStructCreate("byte Binary[" & $iSize & "]")
$pBinary = DllStructGetPtr($tBinary)
$tChar = DllStructCreate("char Data[" & $iSize & "]", $pBinary)
DllStructSetData($tBinary, "Binary", $bBinary)


Local $sVar, $sVal
For $i = 1 To $iSize
        $sVar = DllStructGetData($tChar, "Data", $i)
        If $sVar = Chr(0) Then
                $sVal &= Chr(7)
        Else
                $sVal &= $sVar
        EndIf
Next
Msgbox(0, "", $sVal)
对于exe文件,会非常费时。
 楼主| 发表于 2009-12-1 01:03:03 | 显示全部楼层
本帖最后由 破帽遮颜 于 2009-12-1 01:08 编辑

呵呵~很感谢pusofalse的帮助~马上测试一下~
$sFile = "连接管理器.exe"

$hFile = FileOpen($sFile, 16)
$bBinary = FileRead($hFile)
FileClose($hFile)

$iSize = BinaryLen($bBinary)
$tBinary = DllStructCreate("byte Binary[" & $iSize & "]")
$pBinary = DllStructGetPtr($tBinary)
$tChar = DllStructCreate("char Data[" & $iSize & "]", $pBinary)
DllStructSetData($tBinary, "Binary", $bBinary)


Local $sVar, $sVal
For $i = 1 To $iSize
        $sVar = DllStructGetData($tChar, "Data", $i)
;~         If $sVar = Chr(0) Then
;~                 $sVal &= Chr(7)
;~         Else
                $sVal &= $sVar
;~         EndIf
Next

FileWrite(@ScriptDir & '\测试.exe', $sVal)
;~ Msgbox(0, "", $sVal)
这代码转换后再次生成的exe无法使用了~呵呵!
应该post上传到服务器后也无法生成正确的exe文件吧,唉,头晕
发表于 2009-12-1 01:46:25 | 显示全部楼层
当然,把原始数据中的NULL字符改成Chr(7)了。
发表于 2009-12-1 08:11:26 | 显示全部楼层
先占个位置 现在的水平读不懂
发表于 2009-12-1 17:01:40 | 显示全部楼层
首先从Http协议出发
头文件中的两行
Content-Type: multipart/form-data; boundary=---------------------------7d92af01205e8
Content-Length: 527

boundary=---------------------------7d92af01205e8
中的7d92af01205e8为随机生成
---------------------------7d92af01205e8
为数据分隔符
开头的7d表示由IE进行的上传

格式为:
POST ... @CRLF
Content-Type: multipart/form-data; boundary=---------------------------7d92af01205e8 @CRLF
... @CRLF
Content-Length: 527@CRLF
... @CRLF
@CRLF
-----------------------------7d92af01205e8 @CRLF
Content-Disposition: form-data; name="..."; filename="..." @CRLF
Content-Type: application/octet-stream @CRLF
@CRLF
##使用FileOpen("", 16)读出的文件内容##
@CRLF
-----------------------------7d92af01205e8 @CRLF
Content-Disposition: form-data; name="..." @CRLF
@CRLF
...(表单数据) @CRLF
-----------------------------7d92af01205e8 @CRLF
Content-Disposition: form-data; name="..." @CRLF
 @CRLF
 @CRLF
-----------------------------7d92af01205e8-- @CRLF
发表于 2009-12-1 17:09:51 | 显示全部楼层
1.建议以文件内容为界
##使用FileOpen("", 16)读出的文件内容##
将数据包分为三部分发送
2.使用循环发送读取
$File = FileOpen("", 16)
$sValve = 1
While $sValve
$tFile = FileRead($sFile, 512)
If @error = -1 Then $sValve = 0
While BinaryLen($tFile)
$tFile = BinaryMid($tFile, TCPSend($Socket, $tFile)+1)
Wend
Wend
3.发送剩余数据
发表于 2009-12-5 12:59:15 | 显示全部楼层
学习下,留个脚印!~慢慢学习!~!~
发表于 2009-12-7 11:12:23 | 显示全部楼层
太深奥了,看不懂啦,再看下去就没有信心学下去了。。还是找些简单的开始学习!!
发表于 2009-12-7 14:42:01 | 显示全部楼层
学习中但是还是看不懂
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 13:44 , Processed in 0.084831 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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