Kürzeste Lösung für. Add,Ignore next lines until change

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Kürzeste Lösung für. Add,Ignore next lines until change

Beitrag von GlassJoe »

Josh hat geschrieben:Für diesen Fall haben wir doch ForEach()

Code: Alles auswählen

NewList x.s()
Define *previous.String

For tmp_p = 65 To 90
  AddElement(x()) :  x() = Chr(tmp_p)
  AddElement(x()) :  x() = Chr(tmp_p)
  AddElement(x()) :  x() = Chr(tmp_p)
  AddElement(x()) :  x() = Chr(tmp_p) 
Next

*previous = LastElement (x())

ForEach x()
  If x() <> *previous\s Or ListSize (x()) = 1
    Debug "New element: " + x()
  Else
    Debug "Ignoring: " + x()
  EndIf
  *previous = @x()
Next
@NicTheQuick
Den ersten Eintrag außerhalb der Schleife abarbeiten zu lassen ist nicht unbedingt die feine Art und kann durch die notwendige Codeverdoppelung leicht zu Fehlern führen.
Hör mir auf mit ForEach :D

Ich hab mich mal mit While gestern den ganzen Tag beschäftigt, und meine vorhanden ForEach Lösungen durch While
(wo es möglich war) ersetzt.

Der Code ist viel kompakter und vertändlicher geworden * In Zukunft probier ich alles erst mit While :mrgreen:


*aber fern von Optimal..........der Code ist die Hölle ^^

Ich habe eine Gadget Liste.

Die wiederum hat Directory Entrys in den jpg's sind, aber auch Entrys die direkte jpg Files sind.

Ich lasse die Directorys in dem Format in eine Preference Datei werfen.

Beispiel

Code: Alles auswählen

[<DIR ENTRY>C:\!JustPics\*ID000000]
<LST FILE> = sVFK8Mev.LST
<NO PREV> = 
<IGN FILTER> = 
; 
<DIR Recursive> = 0
<FILE-ID0>C:\!JustPics\!JustPics.rar = 166**a4b5cf2a58c15b21d0ce83d07dafb1942028c223
<FILE-ID1>C:\!JustPics\Bridge01.jpg = 132411**db050902c54ebd1510dcfa0088e113836e266449
<FILE-ID2>C:\!JustPics\Bridge02.jpg = 84338**d8f51b908fa11b6c2a5b3e72c58fcfb2db2a2f84
<FILE-ID3>C:\!JustPics\Bridge03.jpg = 77206**5822b95ee3d317610f841ed6f8d4d0b1f0c39d6b

[<FILE ENTRY*ID000001]
<LST FILE> = Zy4EZ0UV.LST
<NO PREV> = 
<FILE-ID0>C:\!JustPics22\Break Machine - Street Dance.flv = 17003819**dffbccd04e81620a931bb92839c66a1ec449502f;306746aaf04e7d5f08548d7ec575964a2466f1ac...........
; 
<PREV V OUT> = C:\NewFolder 0001\
<DateC> = 
<DateM> = 
<STATUS> = $Done
<COMMENT> = 
<TAGS> = 
; 
; 
[<FILE ENTRY*ID000002]
<LST FILE> = 0lLTkvDX.LST
<NO PREV> = 
<FILE-ID0>C:\!JustPics22\Bridge01.jpg = 132411**db050902c54ebd1510dcfa0088e113836e266449
; 
<PREV P OUT> = C:\NewFolder 0001\
<DateC> = 
<DateM> = 
<STATUS> = $Done
<COMMENT> = 
<TAGS> = 
; 
; 
[<FILE ENTRY*ID000003]
<LST FILE> = 1PjiaQAr.LST
<NO PREV> = 
<FILE-ID0>C:\!JustPics22\Bridge02.jpg = 84338**d8f51b908fa11b6c2a5b3e72c58fcfb2db2a2f84
; 
<PREV P OUT> = C:\NewFolder 0001\
<DateC> = 
<DateM> = 
<STATUS> = $Done
<COMMENT> = 
<TAGS> = 
; 
; 
Gibt also Folder Entrys Groups (mit SubKeys als Files) und und File Entry Groups

Und ich lasse alles in eine structurierte Linked List (W2_PicList()) werfen, da ich zu dem Zeitpunkt zu der sie gefüllt wird, aus einer Prefence Datei lese lassen muss, und kein Bock hab da in der while schleife noch rumzufummeln, weil die sowieso schon so viel erledigen muss. Prüfen ob eine Extension für die ein Thumbail erstellt werden soll, die ursprüngliche Gadget Entry Position ermitteln usw

Und dann geht der Mist los !

Das Tool kann von kompletten Ordnern ein Preview Thumbail erstellen, und von einzelnen Entrys.

Code: Alles auswählen

GadgetEntryPos  | file/folder
000000 | c:\justpics\  <--- 10 Files
000001 | c:\morepics\ <- 10 Files
000002 | c:\hans1.jpg
000003 | c:\hans2.jpg
000004 | c:\hans3.jpg
000005 | c:\blabla\klaus1.jpg
000006 | c:\blabla\klaus2.jpg
000007 | c:\blabla\klaus3.jpg
Die Files aus Entry 00000, müssen in eine andere Temporäre Liste. Die wiederum die Thumbail Matrix füllt, aus der dann ein großen Bild mit mehreren kleinen erstellt wird.

Also muss ich ne Schleife abarbeiten lassen, die markieren tut (W2_PicList()\Status ist dann 1) wann der nächste Ordner anfängt (auch ob es ursprünglich ein Folder oder File Entry war, weil ich das viel später brauche) und das die EntryID Präfix für die große JPG Ausgabe Datei anlegt. Und den AusgabeDateinamen für jedes Element richtig setzt.
z.B
Element 0 -> 000000-OrdnernameKonvertiert-OriginalDateiname.jpg
Element 1 -> 000000-OrdnernameKonvertiert-OriginalDateiname.jpg
...
Element 10 -> 000001-OrdnernameKonvertiert-OriginalDateiname.jpg
Element 11 -> 000001-OrdnernameKonvertiert-OriginalDateiname.jpg

Dann wird eine While Schleife abgearbeitet, die die Temporäre Liste füllt, aus der die Thumbnails erstellt werden.

Und diese While schleife, füllt bis die nächste "Other Folder" Markerung gefunden wird, und führt dann aus.

Soweit sogut...........und jetzt kommt der nervige Teil, der mich fast um den Verstand gebracht hat (Wutanfälle, Build Num 39383948349)

Die einzelnen Bilder !

Code: Alles auswählen

gadgetentry pos  | file/folder
000000 | c:\justpics\  <--- 10 Files
000001 | c:\morepics\ <- 10 Files
000002 | c:\hans1.jpg
000003 | c:\hans2.jpg
000004 | c:\hans3.jpg
000005 | c:\blabla\klaus1.jpg
000006 | c:\blabla\klaus2.jpg
000007 | c:\blabla\klaus3.jpg
Hans 1 bis Hans 3 zu 00002-000004 - hans1.jpg
Klaus1 bis Klaus 3 zu 00005-000007 - blabla_klaus1.jpg

Alle Files sind in einer Liste ! Also muss ich den Versatz um 20 Positionen den die Files aus den Foldern verursacht haben aus noch berücksichtigen (start position für die folgenden while schleifen) wenn all der folgende Stress kommt.

Startposition der W2_PicList() Liste setzen.

Per While die Liste durchgehen und denn Versatz zwischen
Hans1.jpg und Hans3.jpg berechnen lassen (nehme als Vergleich die Directory Names, weil für die Single Pics noch keine Folder Change Variable gesetzt ist, und einem Counter W2_PicList()\DiffCountFirstToLast der den Versatz vom ersten File -> Hans1 bis zum letzten Hans3 mitzählt) damit ich das mit den Dateinamen

Hans 1 bis Hans 3 zu 00002-000004 - hans1.jpg
Klaus1 bis Klaus 3 zu 00005-000007 - blabla_klaus1.jpg

hinkriegen kann.

Danach darf ich schon wieder ne Schleife aufrufen, diesmal eine ForEach, die W2_PicList()\FirstSinglePicEntry
setzt, immer wenn das Directory sich sich ändert (Warum ich nicht gleich W2_PicList()\Status von weiter oben nehme ? Weil das eine Markierung nur für Entrys die Directorys waren ist, muss so sein, weil es noch eine Template List gibt die für viel später gefüllt wird, und differenzieren muss, zwischen ursprünglich jps aus Folder Entry oder Single jpg Files)

Und dann kommt nächste Tortur !

Die While Schleife die die Ausgabe Dateinamen generiert aus

W2_PicList()\FirstSinglePicEntry als Start und W2_PicList()\FirstSinglePicEntry + W2_PicList()\DiffCountFirstToLast als
Stop.

Danach kommt wieder ForEach

Die füllt die W2_TMP_PicList() Liste, bis sich der Folder ändert, wenn geändert, muss das Prev File erstellt werden.

Und danach kommt schon wieder eine ForEach Schleife mit der die Template Liste durch Einträge von W2_PicList()
gefüllt wird.

Code: Alles auswählen

 If W2_PicList()\EntryFromFolder = 1
      PrevTPLp()\EntryWasFolder = 1
      PrevTPLp()\Src = W2_PicList()\Pic+" | more in same Folder" 
      PrevTPLp()\FolderStart = W2_PicList()\Status  
    Else
      PrevTPLp()\FolderStart = W2_PicList()\Status
      PrevTPLp()\EntryWasFolder = 0 ; Reset from -1 to 0. Or other Procedure will interprete -1 as True ! like = 1
      PrevTPLp()\Src = W2_PicList()\Pic
      PrevTPLp()\DiffCountFirstToLast.i = w2_piclist()\DiffCountFirstToLast.i 
    EndIf 
    
    PrevTPLp()\PrevFile = GetFilePart(w2_PicList()\final_out)
    PrevTPLp()\EntryPos = W2_PicList()\EntryPos
    PrevTPLp()\PrevFolder = W2_PicList()\OUT
....
...
Und dann endlich der letzte Teil.

Eine For Schleife die rückwärts arbeiten muss, und mit PrevTPLp()\EntryWasFolder
und PrevTPLp()\FolderStart

die Namen der PrevFiles korrigiert.

Weil die in der Template Liste so drin sind

Code: Alles auswählen

SourceFile | Prev OutputFile
c:\hans1.jpg | 00002-00002.jpg
c:\hans2.jpg | 00002-00003.jpg
c:\hans3.jpg | 00002-00004.jpg
c:\blabla\klaus1.jpg | 00005-00005.jpg
c:\blabla\klaus2.jpg | 00005-00006.jpg
c:\blabla\klaus3.jpg | 00005-00007.jpg
Weil dort wo die Template Liste benutzt wird, brauch ich das so.

c:\hans1.jpg | 00002-00004.jpg
c:\hans2.jpg | 00002-00004.jpg
c:\hans3.jpg | 00002-00004.jpg
c:\blabla\klaus1.jpg | 00005-00007.jpg
c:\blabla\klaus2.jpg | 00005-00007.jpg
c:\blabla\klaus3.jpg | 00005-00007.jpg

Da nur immer das erste dargestellt wird, und dann bringt mir 000002-000002 und 000005-000005 nichts.

Jedenfalls funzt der Code, hab durchgeprüft wie blöd, aber es ist ein scheiß umständlicher, und vor allem hässlicher Code !

Das ist nur ein Bruchteil der Tortur.

https://postimg.org/image/ygvo45ecl/

*kotz*

Und wieviel Wut und Frust ich geschoben hab, sieht mann an Zeug wie

Code: Alles auswählen

failreturn(ProcName$,-3,"22 FUUUUUUUUUUUUUUUUCK")
Zuletzt geändert von GlassJoe am 25.08.2017 04:00, insgesamt 1-mal geändert.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Kürzeste Lösung für. Add,Ignore next lines until change

Beitrag von mk-soft »

Vielleicht an anderen Weg beschreiten.

Du hast ja eine Liste der Dateien mit Path. Aus dieser kannst du ja eine MD5-Fingerprint erstellen und unter diesen das Thumbnail erstellen.
Zur Aktualisierung die Liste neu einlesen und den vorhanden Fingerprint filtern.

P.S.
In den MD-Fingerprint kann man dann auch das Änderungsdatum und die Grösse der Datei integrieren.
Somit bekommt man auch eine Änderung mit.

Update

Code: Alles auswählen


; ***************************************************************************************

EnableExplicit

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  #SEP$ = "\"
CompilerElse
  #SEP$ = "/"
CompilerEndIf

UseMD5Fingerprint()

Structure udtFileInfo
  file.s
  size.q
  date.i
  fingerprint.s
EndStructure

Global NewList FileInfo.udtFileInfo()

Global Nofile.s = "desktop.ini"

; ***************************************************************************************

Procedure InStr(String.s, StringGruppe.s, Separator.s) ; Result BOOL

  Protected gruppe.s, find.s
  
  ; Suchstring vorhanden
  If String = ""
    ProcedureReturn #False
  EndIf
  ; Gruppenstring vorhanden
  If StringGruppe = ""
    ProcedureReturn #False
  EndIf
  ; Gruppenstring mit Separator erweitern
  gruppe = Separator + StringGruppe + Separator
  ; Suchstring mit Separator erweitern
  find = Separator + String + Separator
  ; Suchen
  If FindString(gruppe, find, 1, #PB_String_NoCase)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure GetFileInfoRecursive(ID, Directory.s, include.s = "")  
  
  Protected Name.s, extension.s, temp.s
  
  If ExamineDirectory(ID, Directory, "*.*") 
    While NextDirectoryEntry(ID)  
      Name = DirectoryEntryName(ID)  
      If DirectoryEntryType(ID) = #PB_DirectoryEntry_Directory
        If Name <> ".." And Name <> "."
          GetFileInfoRecursive(ID+1, Directory+Name+#SEP$, include)
        EndIf
      Else
        extension = GetExtensionPart(name)
        If InStr(extension, include, ";") ;FindString(exclude, extension, 1) = 0
          AddElement(FileInfo())
          With FileInfo()
            \file = Directory + Name
            \size = DirectoryEntrySize(ID)
            \date = DirectoryEntryDate(ID, #PB_Date_Modified)
            temp = \file + "#" + FormatDate("%YYYY%MM%DD%HH%II%SS", \date) + "#" + Str(\size)
            \fingerprint = Fingerprint(@temp, StringByteLength(temp), #PB_Cipher_MD5)
          EndWith
        EndIf
      EndIf
    Wend  
    FinishDirectory(ID)
  EndIf  
  
  ProcedureReturn ListSize(FileInfo())
  
EndProcedure  

; ***************************************************************************************

Define path.s = PathRequester("Path", "")
Debug path
Debug GetFileInfoRecursive(0, path, "jpg;png")
ForEach FileInfo()
  Debug FileInfo()\file
  Debug FileInfo()\fingerprint
Next
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Kürzeste Lösung für. Add,Ignore next lines until change

Beitrag von GlassJoe »

mk-soft hat geschrieben:Vielleicht an anderen Weg beschreiten.

Du hast ja eine Liste der Dateien mit Path. Aus dieser kannst du ja eine MD5-Fingerprint erstellen und unter diesen das Thumbnail erstellen.
Zur Aktualisierung die Liste neu einlesen und den vorhanden Fingerprint filtern.

P.S.
In den MD-Fingerprint kann man dann auch das Änderungsdatum und die Grösse der Datei integrieren.
Somit bekommt man auch eine Änderung mit.

Update

Code: Alles auswählen


; ***************************************************************************************

EnableExplicit

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  #SEP$ = "\"
CompilerElse
  #SEP$ = "/"
CompilerEndIf

UseMD5Fingerprint()

Structure udtFileInfo
  file.s
  size.q
  date.i
  fingerprint.s
EndStructure

Global NewList FileInfo.udtFileInfo()

Global Nofile.s = "desktop.ini"

; ***************************************************************************************

Procedure InStr(String.s, StringGruppe.s, Separator.s) ; Result BOOL

  Protected gruppe.s, find.s
  
  ; Suchstring vorhanden
  If String = ""
    ProcedureReturn #False
  EndIf
  ; Gruppenstring vorhanden
  If StringGruppe = ""
    ProcedureReturn #False
  EndIf
  ; Gruppenstring mit Separator erweitern
  gruppe = Separator + StringGruppe + Separator
  ; Suchstring mit Separator erweitern
  find = Separator + String + Separator
  ; Suchen
  If FindString(gruppe, find, 1, #PB_String_NoCase)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
  
EndProcedure

; ***************************************************************************************

Procedure GetFileInfoRecursive(ID, Directory.s, include.s = "")  
  
  Protected Name.s, extension.s, temp.s
  
  If ExamineDirectory(ID, Directory, "*.*") 
    While NextDirectoryEntry(ID)  
      Name = DirectoryEntryName(ID)  
      If DirectoryEntryType(ID) = #PB_DirectoryEntry_Directory
        If Name <> ".." And Name <> "."
          GetFileInfoRecursive(ID+1, Directory+Name+#SEP$, include)
        EndIf
      Else
        extension = GetExtensionPart(name)
        If InStr(extension, include, ";") ;FindString(exclude, extension, 1) = 0
          AddElement(FileInfo())
          With FileInfo()
            \file = Directory + Name
            \size = DirectoryEntrySize(ID)
            \date = DirectoryEntryDate(ID, #PB_Date_Modified)
            temp = \file + "#" + FormatDate("%YYYY%MM%DD%HH%II%SS", \date) + "#" + Str(\size)
            \fingerprint = Fingerprint(@temp, StringByteLength(temp), #PB_Cipher_MD5)
          EndWith
        EndIf
      EndIf
    Wend  
    FinishDirectory(ID)
  EndIf  
  
  ProcedureReturn ListSize(FileInfo())
  
EndProcedure  

; ***************************************************************************************

Define path.s = PathRequester("Path", "")
Debug path
Debug GetFileInfoRecursive(0, path, "jpg;png")
ForEach FileInfo()
  Debug FileInfo()\file
  Debug FileInfo()\fingerprint
Next
Ja ich weis ich hab ja schon eine Liste wo die Dateigröße, Datum, Prüfsumme usw drin ist, nur hab ich das
Tool so vollgepackt mit Optionen, daß ich sehr viel verteilen musste, und es mich vor jeder großen Änderung graust :freak: da ja endlich alles durchgetestet ist und alles funzt.

Die ganze Angelegenheit ist ziehmlich heikel, ich hab eine einzige Sache anders gemacht (nur der Name von einem Pref Key) und musste dann an zig Orten (es benutzt insgesammt 6 Fenster) anpassen, und alle alten Projekt Files waren nutzloss.

Das Tool ist sehr ausufernd geworden, aus etwas wo ich eine Woche eingeplant hatte, sind fast 4 und bis zu 16 Stunden Kampf täglich geworden. :bluescreen: hab den halben Sommer vergeudet :bluescreen:

Also wie soll ich sagen mann schmeist Folder & Files in eine Joblist und ....... das Tool (Tool kann mann fast schon nicht mehr sagen es hat ca 16k Zeilen Code und ist ohne Zusatz Helferlein schon bei 1,3mb) packt in Rar b.z.w 7zip Ordner, und erstellt danach erst für alle Video Files ein Preview Thumbnail (da war es leicht, ist ja nur immer eine Datei, und die Bildchen die vom Clip erstellt werden haben auch alle die selbe Aspect Ratio) und danach für die Bilder ein Prev File, daß dann so aussieht.

https://postimg.org/image/3p8at9cdh/

Volle lahme SHA1 Prüfsummen (und natürlich die Dateigröße dazu) hab ich für alle Files unter 3 MB in der Preference Datei.
Für Files ab 3 MB, wird eine viel schnellere 5 Checkpoint Methode angewendet, die 5 x SHA1 Prüfsummen aus je 100.000 Bytes aus 5 Positionen im File erstellt (im Post oben hab ich aber die Prüfsumme massiv gekürzt, weil die so lang war, daß das Code Tag
total eigenartig aussah)

Die Prüfsummen hab ich nur drin, falls mann das Projekt wieder packen will unter den selben Bedingungen und mit exakt den selben Files, hab einen Verifzierer eingebaut, der die fehlenden/geänderten Dateien zusammen sucht (erst Dateigrößen Abgleich dann SHA) in einen extra SourceFolder oder Virtuelles Laufwerk kopiert, so das mann es wieder zusammen packen kann.

Jedenfalls hab ich einige Möglichkeiten eingebaut die sehr vieles verkompliziert haben, und desshalb musste ich so verteilen, und hab drauf geachtet das möglichst uneffitzient nacheinander ausgeführt wird (Dateien in eine Linked List, Prüfsummen dabei erstellen, Dateigröße auch rein, dann packen, danach Video Previews, danach erst Pic Previews, dann erst die Template Liste erstellen und füllen, zig schleifen mit kleinen Änderungen statt wenige mit mehreren Verschachtelungen und Variablen)

Entry Option: Exclude Files (nur in Foldern aktiv) from anything if extension XY
Entry Option: Use Recursive
Entry Option: No Preview
Entry Option: Add Tags
Entry Option: Add Comment
Projekt Option: Use Password
Projekt Option: Generate Password
Projekt Option: Split Archive by XY Megabyte
Projekt Option: Compression Strenght
Projekt Option: Do not show Filename in Video Preview Thumbnail
Projekt Option: Create Rar Output Files with ShortFileName *
Projekt Option: Add Comment
Projekt Option: Create One Archive For Each Entry
Projekt Option: Create Previews for Video Files
Projekt Option: Create Previews for Pictures
Projekt Option: Create Previews from Pictures or Folders or both if Create Previews for Pictures is activated

* aus

C:\hans wurst die alte \socke, muss sich mal wieder die füße waschen\

wird

c:\New Folder 0000\000001 - h w d a s m s m w d f w.rar
und es wird in c:\new Folder 0000\ ein leerer Ordner erstellt
der 000000 - hans wurst die alte - socke muss sich mal wieder die füße waschen
heist, damit mann gleich was das mal war.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Kürzeste Lösung für. Add,Ignore next lines until change

Beitrag von GPI »

mk-soft hat geschrieben:Vielleicht an anderen Weg beschreiten.

Du hast ja eine Liste der Dateien mit Path. Aus dieser kannst du ja eine MD5-Fingerprint erstellen und unter diesen das Thumbnail erstellen.
Was man dabei aber immer beachten muss: Dieser MD5-Fingerprint ist zwar für die Datei eindeutig, aber umgekehrt ist das nicht der Fall. Sprich ein und die selbe MD5-Prüfwert kann durchaus mehreren Dateien zugewendet werden. Solche Kollisionen muss man natürlich beachten.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten