Hallo Axolotl,
die X-Fach vorkommenden Aufrufe waren versuche, die ich erstellte, mit dem gesamten Teil-Projekt
Ich hab sie ausgeklammert, wenn ich versuchte, bei einem anderen Ort. Besser gewesen wäre zu löschen als zu kopieren
und ausklammern zu wollen.
Merke, gerade wie faul ich zum Teile war und nun viel mehr Arbeit drinnen steckt Fehler zu bereinigen.
Ich habe zuerst meine Arbeit hier dokumentiert und erst danach Deine Arbeit begonnen zu ergründen.
Dachte mir, ich möchte versuchen, ob ich es herausbekommen, ansonsten versuche ich meine Gedankenfehler
zu vergleichen mit Deinem Code und Fachwissen.
Merke erst jetzt auch, dass DU eigentlich mir die Lösung, an der ich gescheitert war, bereits präsentiert hättest.
Das war mir so auch nicht bekannt, dass man das Archiv in dem Sinn überlisten kann, mit unerlaubten Zeichen.
Muss ich wohl versuchen, im Hinterkopf zu halten.
Alles in allem hätte ich Dein Beispiel früher zu Hand genommen wäre mir vielleicht sowas aufgefallen
und ich hätte die Bemerkung zum Archiv anders formuliert.
Ich habe gerade ein, zwei Fragen dazu.
Erstellen, wenn ich faul bin aus dem PB heraus bestens geklappt. Muss nicht sein, dass ich es als Anwendung habe.
Erstellen im PB geht, den Patch Anwenden in dem Sinn IN PureBasic geht auch.
Erstelle ich eine Anwendung, passiert bei mir nichts. Ich habe es jetzt mal gepackt mit den verschiedenen Packer Typen.
Einen Test mit Tar als konkretes Beispiel genommen.
Patch ausführen PB geht.
Patch ausführe exe passiert bei mir nichts.
Ich habe es im Verzeichnis der Source gestartet
Ich habe es in einem x-beliebigen Verzeichnis gestartet.
Ich habe die Pfadangaben entfernt und NUR Datei zum Entpacken in dem Sinn auch die "Patch" Datei
in das selber Verzeichnis genommen. Keine Änderung.
Gibt es etwas, auf das man achten müsste oder besser beim Compiler?
Admin Rechte, explizit als non Super User so etwas ...
Sorry für die vielleicht etwas doofe Frage,
ich sehe nur, dass die Anwendung wahrscheinlich beendet wird, ohne richtig aufgeführt zu werden.
Error oder hängen kann ich auch nicht erkennen.
[EDIT]
Da ich mich selber an der Nase nehmen könnte lasse ich den Post.
das ganze ist wieder mal für mich mehr als Peinlich aber ich stehe dazu.
Es steht
DEBUG PatchWithPackage(Updater$, OldFile$) oder auch
DEBUG CreatePackage(Updater$, OldFile$, NewFile$)
Wenn man lesen würde oder könnte würde sowas einem an den Kopf springen.
Kopfnuss hätte ich jetz wirklich zusätzlich verdient.
[/EDIT]
Beste Grüsse und einen schönen Feierabend
Christian
Axolotl hat geschrieben: 10.09.2024 14:58
Hi ChrigiGee,
ChrigiGee hat geschrieben: 09.09.2024 21:04.....
Was mir aufgefallen ist, bei der erstellten Patch Datei, wird mir leider der komplette Pfad mitgespeichert.
....
Wenn Du dir mein letztes Beispiel angesehen oder evtl. durchgearbeitet hättest, dann würdest Du wissen, dass man in einer Archiv-Datei (Pack, ZIP, etc.) auch einen Filenamen abspeichert. Ich habe in der Procedure folgende Zeile eingebaut.
Code: Alles auswählen
packedFile$ = ReplaceString(NewFile$, #PS$, "?") ; change PathSeparator with some char not allowed in filenames
Dadurch wird die Datei auf der ersten Ebene gespeichert, weil ich den #PS$ (Path Separator) durch das '?' (Fragezeichen) ersetzt habe. Das Fragezeichen darf ja bekanntlich in Datei- und Verzeichnisnamen nicht verwendet werden.
Alternativ kann man natürlicht auch
schreiben.
Ein paar Gedanken zu deinem Beispiel:
Du hast den Sinn (die Aufgabe) des Befehls IncludeFile "Dateiname" bzw. XIncludeFile "Dateiname" nicht verstanden. Oder anders gesagt, Du verwendest die Befehle falsch. (siehe auch Kommentar Kiffi)
Falls Du die Proceduren aufrufen willst, solltest Du wissen, dass Proceduren direkt aufgerufen werden.
Hier ein ganz einfaches (aus meiner Sicht) Beispiel ergänzt mit verschiedenen Variablen-Deklarationen und deren Auswirkung:
Aber auch dafür hatte ich ja bereits einen Link geschickt, der die Zusammenhänge erklärt.
Code: Alles auswählen
EnableExplicit ; Variablen müssen deklariert sein, bevor ich sie benutze.
Global GlobalVar.i = 100 ; Integer Variable, die überall gültig ist.
Define DefineVar$ = "Leer" ; String Variable (alternativ: DefineVar.s), die ausserhalb von Procedures gültig ist.
; ; ... aber mit Shared in Proceduren gültig gemacht werden kann.
Define ReturnValue ; = 0 ; Interger Variable, weil .i der Standard ist. Initialisiert mit Null ist auch Standard
Procedure Test(Text$)
Protected result ; Lokale Variable (nur gültig innerhalb der Procedure Test()
; ; .... das gilt auch für die Variable Text$
Shared DefineVar$ ; = "Neuer Wert" ; direkte zuweisung ist nicht erlaubt !
DefineVar$ = "Neuer Wert" ; so geht es !!
Debug "Text als Argument: " + Text$ ; schreibt in die Debug Ausgabe
result = 1
ProcedureReturn result ; der Wert der lokalen Variable result wird von der Procedure zurückgegeben.
EndProcedure
ReturnValue = Test("Hallo Welt!") ;
; Debug "result = " + result ; Variable result ist hier nicht gültig! Mit EnableExplicit Compilerfehler
Debug "GlobalVar = " + GlobalVar
Debug "DefineVar$ = " + DefineVar$
Debug "ReturnValue = " + ReturnValue ; PB konvertiert Integer in String (automatisch)
Debug "ReturnValue = " + Str(ReturnValue) ; ... so wird die Konvertierung "sauber" durchgeführt.
DisableExplicit ; Hebt das Compiler Verhalten EnableExplicit wieder auf.
Debug "result = " + result ; Variable result ist hier gültig, aber 0 weil nicht die gleiche Variable wie in Procedure!