SHARE
TWEET

Create filename based on file hash

zizzo81 Sep 14th, 2019 107 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function SaveBlobFile(const AFilename: String; var AHash: String): Boolean;
  2. var
  3.   Folder, FN, OldF: String;
  4. begin
  5.   Result := False;
  6.   // Calcolo l'hash del file
  7.   AHash := TSHA256.File(AFilename);
  8.   // E' fallito il calcolo dell'hash, probabilmente non ho accesso al file.
  9.   if Length(AHash) = 0 then Exit;
  10.   // Memorizzo la cartella corrente in cui si trova il programma.
  11.   OldF := GetCurrentDir();
  12.   try
  13.     // Imposto la cartella corrente come la cartella in cui si trova il mio eseguibile.
  14.     // Se questa funzione viene eseguita in una DLL √® la cartella dell'eseguibile che ha caricato la libreria.
  15.     SetCurrentDir(IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
  16.     // Prendo la cartella dalla configurazione globale, se √® una cartella relativa si espander√† per rappresentare un percorso assoluto relativo alla posizione dell'eseguibile.
  17.     Folder := IncludeTrailingPathDelimiter(ExpandFilename(GlobalConfig.DataFolder))
  18.   finally
  19.     // Ripristino, appena possibile, lo status quo della cartella corrente
  20.     SetCurrentDir(OldF)
  21.   end;
  22.   // Aggiungo una sottocartella "Blobs"
  23.   Folder := IncludeTrailingPathDelimiter(Folder + 'Blobs');
  24.   // Aggiungo una sottocartella in base all'hash (livello 1)
  25.   Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 1, 2));
  26.   // Aggiungo una sottocartella in base all'hash (livello 2)
  27.   Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 3, 2));
  28.   // Aggiungo una sottocartella in base all'hash (livello 3)
  29.   Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 5, 2));
  30.   // Aggiungo una sottocartella in base all'hash (livello 4)
  31.   Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 7, 2));
  32.   // Mi assicuro che esista la cartella
  33.   if ForceDirectories(Folder) then begin
  34.     // Aggiungo l'hash come nome del file e l'estensione del file originale
  35.     FN := Folder + AHash + Copy(ExtractFileExt(AFilename), 1, 10);
  36.     Result := CopyFile(PChar(AFilename), PChar(FN), False)
  37.   end
  38. end;
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top