Patcher Erstellen / Kleines Problem?

08/02/2013 13:28 wasweisichdenn#1
Hallo,

habe nur ein kleines Problem denke ich mal und stehe ziemlich auf dem schlauch.

Der Patcher an sich läuft soweit, nur ist das Problem das er egal ob das File vorhanden ist, es immer und immer wieder neu downloadet wenn ich den Patcher starte.

Ich hoffe Ihr könnt mir weiter helfen, nach 1 1/2 Tagen suchen und lesen habe ich es nicht hinbekommen das er vorher schaut ob die Files vorhanden sind und wenn vorhanden dann Skip ansonsten downloaden.

Hier der code..

PHP Code:
ProgressOn("Updater""Patch wird gedownloadet""Downloade Patchlist.ini ...")
$patch IniRead(@ScriptDir '\patch.ini',"host","url","default")
$hDownload InetGet($patch, @ScriptDir '\Patchlist.ini'1)
InetClose($hDownload)
sleep(1000)
$iAnzahl Number(IniRead(@ScriptDir '\patchlist.ini''Files''Anzahl', -1))

If 
$iAnzahl 0 Then
    $iGesamtGroesse 
0
    
For $iIndex 1 To $iAnzahl
        $sFile 
IniRead(@ScriptDir '\patchlist.ini''Files''File' $iIndex"")
        If 
$sFile "" Then
            MsgBox
(266256"Fatal Error""Ein fataler Fehler ist aufgetreten:" & @CRLF "Beschädigte Patchlist.ini")
        Else
            
ProgressSet(0"Ermittle Daten (1/"&$iAnzahl&")")
            
$iGesamtGroesse += InetGetSize($sFile1)
        EndIf
    
Next
    $iBereitsGedownloadet 
0
    ProgressSet
(0"Downloade Patch-Files (1/"&$iAnzahl&")")
    For 
$iIndex 1 To $iAnzahl
        $sFile 
IniRead(@ScriptDir '\patchlist.ini''Files''File' $iIndex"")
        If 
$sFile "" Then
            MsgBox
(266256"Fatal Error""Ein fataler Fehler ist aufgetreten:" & @CRLF "Beschädigte Patchlist.ini")
        Else
            If 
Not FileExists(@ScriptDir '\mods\' & FileGetName($sFile)) Then FileDelete(@ScriptDir & '\mods\' & FileGetName($sFile))
            $hDownload = InetGet($sFile, @ScriptDir & '
\mods\' & FileGetName($sFile), 1, 1)


            Do
                $iAktuellGedownloadet = $iBereitsGedownloadet + InetGetInfo($hDownload, 0)
                ProgressSet(Ceiling($iAktuellGedownloadet / $iGesamtGroesse * 100), "Downloade Patch-Files ("&$iIndex&"/"&$iAnzahl&")")
                Sleep(25)
            Until InetGetInfo($hDownload, 2)
            InetClose($hDownload)
        EndIf
        $iBereitsGedownloadet += FileGetSize(@ScriptDir & '
\mods\' & FileGetName($sFile))
        ProgressSet(Ceiling($iBereitsGedownloadet / $iGesamtGroesse * 100), "Downloade Patch-Files ("&$iIndex&"/"&$iAnzahl&")")
    Next
ElseIf $iAnzahl = -1 Then
    MsgBox(266256, "Fatal Error", "Ein fataler Fehler ist aufgetreten:" & @CRLF & "Beschädigte Patchlist.ini")
EndIf
ProgressSet(100, "Download komplett")
Sleep(1000)
ProgressOff()


Func FileGetName($sPath)
    Local $aStrings
    $aStrings = StringSplit($sPath, '
/')
    Return $aStrings[$aStrings[0]]
EndFunc 
Bitte um Hilfe, BITTE!
08/02/2013 23:08 Achat#2
Also ich an deiner Stelle würde den Code löschen.

IniRead :C
Und was soll das mit FileGetName?

Du könntest Pfadangaben z.B. in einer CSV Datei speichern, beispielsweise
Code:
local path;remote path
%scriptdir%\asdf\datei1;http://..../asdf/datei1
%scriptdir%\asdf\datei2;http://..../asdf/datei2
Das ganze ließe sich einfach mit StringRegExp auslesen und in einer for Schleife abarbeiten. Somit können auch weitere Daten, z.B. MD5 Hashes der Dateien, einfach eingefügt werden.
Code:
$sCSV = 'local path;remote path' & @CRLF & _
		'%scriptdir%\asdf\datei1;http://..../asdf/datei1' & @CRLF & _
		'%scriptdir%\asdf\datei2;http://..../asdf/datei2' & @CRLF

$aCSV = StringRegExp($sCSV, '(.*);([^\r\n]*)', 3)
For $i = 0 To UBound($aCSV) - 2 Step 2
	ConsoleWrite('Erstelle Verzeichnis ' & StringRegExpReplace($aCSV[$i], '((.+)\\.*)', '\2') & @CRLF)
;~ 	DirCreate(StringRegExpReplace($aCSV[$i],'((.+)\\.*)','\2'))
;~ 	If Not FileExists($aCSV[$i]) Then InetGet($aCSV[$i], $aCSV[$i + 1])
	ConsoleWrite('Wenn "' & $aCSV[$i] & '" nicht exisitert, dann lade "' & $aCSV[$i] & '" von "' & $aCSV[$i + 1] & '"' & @CRLF)
Next
MfG
08/03/2013 10:13 Virus.bat#3
Eine Idee für ein SelfUpdater (eine exe allein) wäre auch so schon genugend
Code:
#requireadmin
 InetGet ("Link",@Scriptdir &"Version.ini",1) 
If not Fileexistens (@TempDir&"Version.ini") then
INetGet ("Link",@TempDir&"Version.ini")
$dl = IniRead (@TempDir&"Version.ini","Downloads","..","..")
InetGet ($dl,"..")
 Endif
Next
If not IniRead(@ScriptDir&"Version.ini","Version",V","V.00") = (@TempDir&"Version.ini","Version",V","V.00") then 
$Downloads = IniRead ();Downloads in @ScriptDir Version.ini
INetGet($Downloads,@ScriptDir&"",1)
Else
FileInstall (@ScriptDir&"Version.ini",@TempDir &"Version.ini",1)
Endif
Hier Fragt er Nur ab ob sich zu letztem Mal was geändert hat an der Version..;) Sorry wegen manchen Fehler wenn du welche Findest .

Mfg
08/03/2013 11:30 Achat#4
Ihr solltet mal von IniRead&Write wegkommen.
Da diese Funktionen ohne Handle arbeiten, sind sie sehr langsam.

[Only registered and activated users can see links. Click Here To Register...]
Quelle: [Only registered and activated users can see links. Click Here To Register...]

Deine Pfade sind falsch.

MfG
08/03/2013 12:14 Virus.bat#5
Quote:
Originally Posted by Achat View Post
Ihr solltet mal von IniRead&Write wegkommen.
Da diese Funktionen ohne Handle arbeiten, sind sie sehr langsam.

[Only registered and activated users can see links. Click Here To Register...]
Quelle: [Only registered and activated users can see links. Click Here To Register...]

Deine Pfade sind falsch.

MfG
Ja ich weiß eig. Wollte ich privat server aber da ich mich selber nicht damit auskenne ;o
@ScriptDir &"\Version.ini"

Besser?:o
08/03/2013 14:00 Achat#6
Quote:
Originally Posted by Virus.bat View Post
Eine Idee für ein SelfUpdater (eine exe allein)
[Only registered and activated users can see links. Click Here To Register...]

MfG
08/08/2013 18:25 lolkop#7
Quote:
Originally Posted by Achat View Post
[Only registered and activated users can see links. Click Here To Register...]
Quelle: [Only registered and activated users can see links. Click Here To Register...]
Registry = modern? lol

selbst microsoft versucht immer mehr von der veralteten registry struktur loszukommen...

beim speichern von daten kommt es vorallem darauf an, wie die daten gehandhabt werden sollen. habe ich beispielsweise 3 vorgegebene auswahlmöglichkeiten im programm, von der die gewählte gespeichert werden soll, so macht es durchaus sinn, einfach den index der gespeicherten wahl binär zu sichern, da ich so mit einer 2bit großen datei auskommen würde. das die "save-datei" für dau's nicht lesbar ist, kann je nach einsatzgebiet vorteilhaft oder eben auch nicht sein.

will jemand ein einfaches, für menschen leicht les-/modifizierbares format verwenden, so ist die ini variante auch durchaus brauchbar (für leute mit wenig it-erfahrung besser als die moderne xml variante).