Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function SaveBlobFile(const AFilename: String; var AHash: String): Boolean;
- var
- Folder, FN, OldF: String;
- begin
- Result := False;
- // Calcolo l'hash del file
- AHash := TSHA256.File(AFilename);
- // E' fallito il calcolo dell'hash, probabilmente non ho accesso al file.
- if Length(AHash) = 0 then Exit;
- // Memorizzo la cartella corrente in cui si trova il programma.
- OldF := GetCurrentDir();
- try
- // Imposto la cartella corrente come la cartella in cui si trova il mio eseguibile.
- // Se questa funzione viene eseguita in una DLL è la cartella dell'eseguibile che ha caricato la libreria.
- SetCurrentDir(IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
- // Prendo la cartella dalla configurazione globale, se è una cartella relativa si espanderà per rappresentare un percorso assoluto relativo alla posizione dell'eseguibile.
- Folder := IncludeTrailingPathDelimiter(ExpandFilename(GlobalConfig.DataFolder))
- finally
- // Ripristino, appena possibile, lo status quo della cartella corrente
- SetCurrentDir(OldF)
- end;
- // Aggiungo una sottocartella "Blobs"
- Folder := IncludeTrailingPathDelimiter(Folder + 'Blobs');
- // Aggiungo una sottocartella in base all'hash (livello 1)
- Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 1, 2));
- // Aggiungo una sottocartella in base all'hash (livello 2)
- Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 3, 2));
- // Aggiungo una sottocartella in base all'hash (livello 3)
- Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 5, 2));
- // Aggiungo una sottocartella in base all'hash (livello 4)
- Folder := IncludeTrailingPathDelimiter(Folder + Copy(AHash, 7, 2));
- // Mi assicuro che esista la cartella
- if ForceDirectories(Folder) then begin
- // Aggiungo l'hash come nome del file e l'estensione del file originale
- FN := Folder + AHash + Copy(ExtractFileExt(AFilename), 1, 10);
- Result := CopyFile(PChar(AFilename), PChar(FN), False)
- end
- end;
Advertisement
Add Comment
Please, Sign In to add comment