Pascal: olyan programot szeretnék írni, amely az egész könyvtárstruktúrát bejárja és a fájlok SHA1 lenyomatát kiszámolja és abszolut útvonallal beírja egy fájlba. Hogy lehetne ezt megoldani?
Sajnos én csak egyetlen fájlra tudtam megírni és ez sem abszolut útvonallal kerül bele...
Hogy lehetne ezt átírni (nem Delphi-re és nem Lazarus-ra, hanem Free Pascal-os megvalósításra gondolok), hogy hiba nélkül bejárja az egész meghajtót és beírja az eredményeket?
A programozási rész érdekelne, a "dir/b/s>lista.txt" módszerrel meg lehetne oldani, de a Pascal-os megvalósítás érdekelne.
Mennyire lenne bonyolult ezt átírni?
Program Fajl_lenyomat;
uses sha1;
var
f : text;
FileHash : string;
begin
FileHash := SHA1Print( SHA1File ( ParamStr ( 1 ) ) );
assign(f, 'sha1sums');
ReWrite(f);
WriteLn(f,paramstr(1)+': '+filehash);
Close(f);
end.
Function SHA1Lista(gyökérkönyvtár: string): Fájllista;
var Eredmény: Fájllista;
Begin
.. Vegyük sorra a gyökérkönyvtárban található fájlokat és könyvtárakat:
.. .. Ha (Az éppen kiválasztott elem könyvtár ÉS Az éppen kiválasztott elem nem '.' vagy '..'):
.. .. .. Eredményhez hozzáadjuk az SHA1Lista(gyökérkönyvtár + '/' + éppen kiválasztott elem) eredményét.
.. .. Különben:
.. .. .. Eredményhez hozzáadjuk az éppen kiválasztott elem SHA1 hash-ét.
.. Az Eredményt visszaadjuk.
End;
Tessék, hibakezelés nélkül, te is csinálj valamit:
program project1;
{$mode objfpc}{$H+}
uses Classes, SysUtils, SHA1;
var Lista, ShaLista : TStringList;
i : Integer;
procedure FindFiles(FilesList: TStringList; StartDir, FileMask: string);
var
SR: TSearchRec;
DirList: TStringList;
IsFound: Boolean;
i: integer;
begin
if StartDir[length(StartDir)] <> '\' then StartDir := StartDir + '\';
IsFound := FindFirst(StartDir+FileMask, faAnyFile-faDirectory, SR) = 0;
while IsFound do
begin
FilesList.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);
DirList := TStringList.Create;
IsFound := FindFirst(StartDir+'*.*', faAnyFile, SR) = 0;
while IsFound do
begin
if ((SR.Attr and faDirectory) <> 0) and
(SR.Name[1] <> '.') then DirList.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);
for i := 0 to DirList.Count - 1 do FindFiles(FilesList, DirList[i], FileMask);
DirList.Free;
end;
begin
Lista := TStringList.Create;
ShaLista := TStringList.Create;
FindFiles(Lista, ParamStr(1), '*.*');
Lista.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Files.txt');
for i := 0 to Lista.Count - 1 do
ShaLista.Add(Lista.Strings[i] + ' : ' + SHA1Print(SHA1File(Lista.Strings[i])));
ShaLista.SaveToFile(ExtractFilePath(ParamStr(0)) + 'SHAFiles.txt');
end.
> Nem értem ha nem tudsz programozni miért ilyenekkel foglalkozol ?
Miért, nem így kezdte mindenki, hogy nem tudott programozni de programozni akart?
Köszönöm a válaszokat.
Más feladatokkal el szoktam boldogulni, csak vannak feladatok, amelyek nem mennek.
Szerintem ez az egyetlen kérdés nem elegendő ahoz hogy le lehessen mérni: nem tudok programozni.
Sokszor írtam már itt meg sokak "házi feladatát", olyanokét, akik egyetlen betűt sem írtak le a megoldás érdekében.
Nem gurult el a gyógyszerem, de már kérdésből is - nem Delphi, nem Lazarus - látszott, hogy nincs tisztában még a nyelvvel sem, de ezt már kifejtettem.
A FindFirst, FindNext... sem a könyv végén van.
Ezek után meg jön a hasító függvénnyel ?
...és a végére amit sokszor elmondok a kód meg pocsék.
Off: Géza megint te vagy az ?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!