PDA

View Full Version : مشکل ذخیره نشدن فایل متنی



R2du-soft
جمعه 01 شهریور 1392, 22:24 عصر
سلام دوستان من یه برنامه نوشتم که یه فایلی متنی رو یتوی temp میریزه و تغییرش میده

این کدمه:


Dim reResData() As Byte, reFilePath As String
reResData = LoadResData(101, "CUSTOM")
reFilePath = Environ("temp") & "Actr2so.bat"






Dim s As String
s = ReadFile(Environ("temp") & "Act.bat")
s = Replace(s, "r2du", "1125242")
SaveFile Environ("temp") & "Actr2so.bat", s, True




مشکل من اینه که اصلا معلوم نیست این فایل کجا ریخته میشه و تغییر هم داده نمیشه! در اصل تو SaveFile یه مشکلی هست!!!!

mmssoft
جمعه 01 شهریور 1392, 22:37 عصر
مسیر Temp :


C:\Users\USERNAME\AppData\Local\Temp

و :

Dim reResData() As Byte, reFilePath As String
reResData = LoadResData(101, "CUSTOM")
reFilePath = Environ("temp") & "Actr2so.bat"

Open Environ("temp") & "Act.bat" For Input As #1
s = Input(LOF(1), 1)
s = Replace(s, "r2du", "1125242")
Close #1

Open Environ("temp") & "Actr2so.bat" For Output As #1
Print #1, s
Close #1

البته اگه منظورتو درست فهمیده باشم...

R2du-soft
جمعه 01 شهریور 1392, 22:57 عصر
ممنون داداشی دقیقا درست فهمیدی منظورمو اما چون اون تکسی که من دارم از نوع تکست های یونیکد هست ، کد s = Input(LOF(1), 1) جواب نمیده
چیکار کنم؟

R2du-soft
جمعه 01 شهریور 1392, 23:05 عصر
تنها روش replace کردن فکر کنم از نوع read file باشه! درسته؟

mmssoft
جمعه 01 شهریور 1392, 23:15 عصر
از این ماژول استفاده کن :

Public Function UTF8_Encode(ByVal sStr As String)
On Error Resume Next

Dim L As Long, lChar As Long, sUTF8 As String
For L& = 1 To Len(sStr)
lChar& = AscW(Mid(sStr, L&, 1))
If lChar& < 128 Then
sUTF8$ = sUTF8$ + Mid(sStr, L&, 1)
ElseIf ((lChar& > 127) And (lChar& < 2048)) Then
sUTF8$ = sUTF8$ + Chr(((lChar& \ 64) Or 192))
sUTF8$ = sUTF8$ + Chr(((lChar& And 63) Or 128))
Else
sUTF8$ = sUTF8$ + Chr(((lChar& \ 144) Or 234))
sUTF8$ = sUTF8$ + Chr((((lChar& \ 64) And 63) Or 128))
sUTF8$ = sUTF8$ + Chr(((lChar& And 63) Or 128))
End If
Next L&
UTF8_Encode = sUTF8$
End Function

Public Function UTF8_Decode(ByVal sStr As String)
On Error Resume Next

Dim L As Long, sUTF8 As String, iChar As Integer, iChar2 As Integer
sStr = Replace(sStr, "U^Œ", UTF8_Encode("i'"))
sStr = Replace(sStr, "U`‰", UTF8_Encode("i'"))
For L = 1 To Len(sStr)
iChar = Asc(Mid(sStr, L, 1))
If iChar > 127 Then
If Not iChar And 32 Then
iChar2 = Asc(Mid(sStr, L + 1, 1))
sUTF8 = sUTF8 & ChrW$(((31 And iChar) * 64 + (63 And iChar2)))
L = L + 1
Else
Dim iChar3 As Integer
iChar2 = Asc(Mid(sStr, L + 1, 1))
iChar3 = Asc(Mid(sStr, L + 2, 1))
'sUTF8 = sUTF8 & ChrW$(((iChar And 15) * 16 * 256) + ((iChar2 And 63) * 64) + (iChar3 And 63))
L = L + 2
End If
Else
sUTF8 = sUTF8 & Chr$(iChar)
End If
Next L
UTF8_Decode = sUTF8
End Function

Public Function EncodeString(StrText As String) As String
On Error Resume Next

Dim i As Integer, bEnc As String
For i = 1 To Len(StrText)
bEnc = bEnc & "%" & Hex(Asc(Mid(StrText, i, 1)))
Next
EncodeString = bEnc
End Function


و کدت هم اینطوری تغییر میکنه :

Dim reResData() As Byte, reFilePath As String
reResData = LoadResData(101, "CUSTOM")
reFilePath = Environ("temp") & "Actr2so.bat"

Open Environ("temp") & "Act.bat" For Input As #1
s = Input(LOF(1), 1)
s = UTF8_Decode(s)
s = Replace(s, "r2du", "1125242")
Close #1

Open Environ("temp") & "Actr2so.bat" For Output As #1
Print #1, s
Close #1

R2du-soft
جمعه 01 شهریور 1392, 23:20 عصر
بازهم همون مشکل رو میخوره
متن ارور
run-time error '62':
input past end of file

R2du-soft
جمعه 01 شهریور 1392, 23:22 عصر
داخل این فایل bat هم همیچنی چیزهایی هست
EG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer7" /t REG_SZ /d "r2du" /f

mmssoft
جمعه 01 شهریور 1392, 23:31 عصر
نمیدونم والا، اگه ReadFile یونیکد رو ساپورت میکنه، شاید اینجوری بشه :

Dim reResData() As Byte, reFilePath As String
reResData = LoadResData(101, "CUSTOM")
reFilePath = Environ("temp") & "Actr2so.bat"

s = ReadFile(Environ("temp") & "Act.bat")
s = Replace(s, "r2du", "1125242")

Open Environ("temp") & "Actr2so.bat" For Output As #1
Print #1, s
Close #1

R2du-soft
جمعه 01 شهریور 1392, 23:36 عصر
آقا خدا هرچی میخوای بهت بده :قلب::بوس:
به خدا 3 ساعت بیشتره دارم روش کار میکنم نمیشه،قبلشم یه برنامه نوشتم که به مشکل میخورد ، همینی که دادی کارکرد

:قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب: :قلب:

R2du-soft
شنبه 02 شهریور 1392, 01:04 صبح
سلام،اقا این کد قاطی داره کد رو انگولک میکنم بعضی وقتا عدد رو عوض میکنه بعضی وقتا نه!
تروخدا کمک کنید

R2du-soft
شنبه 02 شهریور 1392, 01:14 صبح
آقا من با این زیر میام فایل رو از تو برنامم میریزم توی temp :


Dim sDir1$
sDir1$ = Environ("temp")

Dim RPachocx As String
Dim RocxArray() As Byte
Dim RBN As Integer
RPachocx = sDir1$ & "\Act.bat"
DoEvents
RocxArray = LoadResData(101, "CUSTOM")
RBN = FreeFile


بعد با کد زیر میام فایلمو اجرا میکنم:


ShellExecute 0, "runas", Environ("temp") & "Act.bat", Command & "/admin", vbNullString, SW_SHOWNORMAL


من میخوام قبل از اینکه کدم اجرا بشه ، یعنی بین کدهای بالا ، بیاد اون فایل رو ویرایش کنه و به جای نوشته های r2du بزاره 123456 ? چطور باید اینکارو کنم؟!

فایلی هم که میریزم توی پوشه temp محتویاتش به طور کامل اینه:



REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer0" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer1" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer2" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer3" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer4" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer5" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer6" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer7" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer8" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "FailSafeServer" /t REG_SZ /d "r2du" /f



REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer0" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer1" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer2" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer3" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer4" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer5" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer6" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer7" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "DefaultServer8" /t REG_SZ /d "r2du" /f
REG add "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Settings" /v "FailSafeServer" /t REG_SZ /d "r2du" /f






جون هرکی دوست دارید اگه بلدید راهنمایی کنید :گریه:

mmssoft
شنبه 02 شهریور 1392, 01:48 صبح
وقتی من توی پست 2 کد رو گذاشتم ، توی پست 3 گفتید متنم یونیکد هست!!! این چیزی که گذاشتید کجاش یونیکد هست؟؟!!

شما یه کار کن، توی کد پست 8 به جای اینکه متن توی متغیر s ریخته بشه و روی اون تغییرات اعمال بشه، اون رو توی یه TextBox با MultiLine = True بذار... نتیجه رو بگو

R2du-soft
شنبه 02 شهریور 1392, 02:07 صبح
بالاخره کد بدون مشکل replace رو یافتم که میشه:


Dim lOpenFile As Long
Dim sFileText As String
Dim sFileName As String

sFileName = sDir1$ & "\Act.bat"

'open the file and read it into a variable
lOpenFile = FreeFile
Open sFileName For Input As lOpenFile
sFileText = Input(LOF(lOpenFile), lOpenFile)
Close lOpenFile

'change 'John Doe' to 'Mary Brown'

sFileText = Replace(sFileText, "r2du", 123456789)

'write it back to the file
lOpenFile = FreeFile
Open sFileName For Output As lOpenFile
Print #lOpenFile, sFileText
Close lOpenFile



داداش گلم به خدا یکی از دوستان بهم گفت یونی کد هست!
شما منو ببخش
اون روشم تست کردم اما جواب نداد، با کد بالا جواب داد که کد کلی برنامه این میشه:







Dim sDir1$
sDir1$ = Environ("temp")
Dim RPachocx As String
Dim RocxArray() As Byte
Dim RBN As Integer
RPachocx = sDir1$ & "\Act.bat"
DoEvents
RocxArray = LoadResData(101, "CUSTOM")
RBN = FreeFile
Open RPachocx For Binary Access Write As #RBN
Put #RBN, , RocxArray
Close #RBN






Dim lOpenFile As Long
Dim sFileText As String
Dim sFileName As String
sFileName = sDir1$ & "\Act.bat"
'open the file and read it into a variable
lOpenFile = FreeFile
Open sFileName For Input As lOpenFile
sFileText = Input(LOF(lOpenFile), lOpenFile)
Close lOpenFile
'change 'John Doe' to 'Mary Brown'
sFileText = Replace(sFileText, "r2du", 123456789)
'write it back to the file
lOpenFile = FreeFile
Open sFileName For Output As lOpenFile
Print #lOpenFile, sFileText
Close lOpenFile




ShellExecute 0, "runas", sFileName, Command & "/admin", vbNullString, SW_SHOWNORMAL