【已解决】关于fileopen()写入模式1和2的怪事?
本帖最后由 apoorman1986 于 2012-3-30 23:04 编辑我把AU3装个U盘,u:\AU3\SciTe\UserHome\用户设置.properties里面设置了很多SCITE编辑器的工具栏,如图,
U盘的盘符每次不同的电脑都会变(忘了用$(autoit3dir) ),所以自己想个自动获取U盘盘符,然后把盘符写入用户设置.properties
的文件中。谢谢元老3mile 的保持原有编码格式写文件,代码如下:Local $Code=[-1,0,32,64,128]
$Drive=DriveGetDrive("removable")
If $Drive = 0 Then
MsgBox(0, "提示", "没有插入U盘")
Exit
EndIf
For $i=1 To $Drive
$s = StringUpper($Drive[$i])
Next
$sfile=$s&"\AU3\SciTe\UserHome\用户设置.properties"
$encoding = FileGetEncoding($sFile)
If $encoding=-1 Then
MsgBox(4096, "错误", "不能获取文件编码.")
Exit
Else
$str=FileRead($sfile)
For $i=0 To UBound($Code)-1;根据文件编码定义字符串标志
If $encoding=$Code[$i] Then
$encoding=$i
ExitLoop
EndIf
Next
$sReplace=StringRegExpReplace($str,'"(.*?)\\',$s)
$str=StringToBinary($sReplace,$encoding)
$rfile=FileOpen($sfile,2)
FileWrite($rfile, $str)
FileClose($rfile)
EndIf
问题是这个$rfile=FileOpen($sfile,2),如果选用$rfile=FileOpen($sfile,1)追加模式则可保持原来的编码,选用$rfile=FileOpen($sfile,2)则不能,试了N次也一样。
选用清空再写入符合目的,但不能保持原有编码,导致U盘里的SCITE编辑器上的工具栏用不了!所以来求解! 用户设置.properties 这个文件必须用 UTF-8 编码吧?
何必检测原用的编码呢?
如果一定要用 FileOpen($sfile,2) 写入新内容, 那么函数参数试试用 2+128 ! 本帖最后由 apoorman1986 于 2012-3-30 11:56 编辑
回复 2# user3000
就是想自动根据文件编码写入,128+2是可以的!Local $Code=[-1,0,32,64,128]
$Drive=DriveGetDrive("removable")
If $Drive = 0 Then
MsgBox(0, "提示", "没有插入U盘")
Exit
EndIf
For $i=1 To $Drive
$s=StringUpper($Drive[$i])
Next
MsgBox(0,"",$s)
$sfile=$s&"\AU3\SciTe\UserHome\用户设置.properties"
$str=FileRead($sfile)
$sReplace=StringRegExpReplace($str,'"(.*?)\\',$s)
$rfile=FileOpen($sfile,130)
FileWrite($rfile, $sReplace)
FileClose($rfile)
本帖最后由 lixiaolong 于 2012-3-30 13:33 编辑
回复 1# apoorman1986
修改了一楼代码,有多余的代码去掉了,还有你这个正则有问题.
用你的正则【"(.*?)\\】就变成这样【command.29.*=I:AU3\Au3.REHelper.exe"】.
应该转换成【command.29.*="I:\AU3\Au3.REHelper.exe"】.
$Drive = DriveGetDrive("removable")
If $Drive = 0 Then
MsgBox(0, "提示", "没有插入U盘")
Exit
EndIf
For $i = 1 To $Drive
$s = StringUpper($Drive[$i])
Next
$sfile = $s & "\AU3\SciTe\UserHome\用户设置.properties"
$encoding = FileGetEncoding($sfile)
If $encoding = -1 Then
MsgBox(4096, "错误", "不能获取文件编码.")
Exit
Else
$str = FileRead($sfile)
$sReplace = StringRegExpReplace($str, '(\w:)', $s)
$rfile = FileOpen($sfile, 2 + $encoding)
FileWrite($rfile, $sReplace)
FileClose($rfile)
EndIf
{:face (361):}多谢小龙指点!你的代码测试成功,我的正则还要继续努力!
页:
[1]