怎么样读取文件(一些exe,jpg等)(非二进制方式)
类似这个exe文件,用文本工具读取出来的内容
使用au3的fileread没效(仅仅读取到几个字符而已)(貌似以前的版本OK?反正现在的版本是读取不了,二进制没问题,但我不需要二进制)
请教高手,怎么样才可以类似文本工具一样直接读取到这些文件,使用于POST
像这样:
请教各位高手给支个招~谢谢! 用FileRead读取实际是全部读取出来了,但读取的数据中因为有NULL字符而显示不全。
测试以下代码便知,NULL字符之后的数据不会显示出来:
Msgbox(0, "", "a" & Chr(0) & "b")
解决方式是把NULL字符替换为其他字符,用DllStruct*系列的函数就可以做到了。 本帖最后由 破帽遮颜 于 2009-12-1 00:15 编辑
:face (37):
pusofalse超版,有没具体点的方案?
如果说仅仅只是不显示倒也无所谓,问题是根本读取不了!
类似如此:
ClipPut(FileRead(@ScriptDir & '\工作进度.XLS'))
粘贴到文本后仅仅只是显示:"邢唷?" 试下这样:
$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: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文件吧,唉,头晕 当然,把原始数据中的NULL字符改成Chr(7)了。 先占个位置 现在的水平读不懂 首先从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 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
Wend3.发送剩余数据 学习下,留个脚印!~慢慢学习!~!~ 太深奥了,看不懂啦,再看下去就没有信心学下去了。。还是找些简单的开始学习!! 学习中但是还是看不懂
页:
[1]