Avatar billede sorenriis Nybegynder
14. juni 2005 - 15:26 Der er 18 kommentarer og
2 løsninger

Filer i delphi

Jeg har 2 spørgsmål ang. filhåndtering i delphi.

1) Jeg vil gerne tjekke om en fil eksisterer.
Filen vil altid have samme placering og samme filnavn.
Filnavnet gemmer jeg således:
FIL := ExtractFilePath(Application.ExeName) + 'test.fil';
Hvordan tjekker jeg så om filen findes?

2) Jeg vil gerne finde ovenstående fils checksum, den størrelse og sidste gang den er ændret (såfremt den eksisterer). Hvordan gør jeg det?
Avatar billede arne_v Ekspert
14. juni 2005 - 15:39 #1
re 1)

If FileExists(FIL) Then
Avatar billede arne_v Ekspert
14. juni 2005 - 15:40 #2
re 2)

Der bliver du nok nødt til at læse den, udregne checksum og sammenligne med noget
du har gemt et andet sted
Avatar billede pjotre Novice
14. juni 2005 - 15:42 #3
1) if FileExists(FIL) then ......
Avatar billede sorenriis Nybegynder
14. juni 2005 - 15:54 #4
Ok...

Ang. 2'eren:

Hvorfor går denne her ikke (udregning af filens størrelse):

begin
FIL := ExtractFilePath(Application.ExeName) + 'test.fil';
AssignFile(FILCHECK, FIL);
  if FileExists(FIL) then
    begin
      Memo.Lines.Add('Fil fundet..');
      FILSTR:=IntToStr(FileSize(FILCHECK));
      Memo.Lines.Add('Filstørrelse: ' + FILSTR); //GÅR NED PÅ DENNE LINJE
      end;
    CloseFile(FILCHECK);
end;

Og hvordan beregner jeg checksummen af filen?
Avatar billede kroning Nybegynder
14. juni 2005 - 16:52 #5
Ovenstående burde virke så hut jeg kan se, hvilken fejl får du?

Ang. størrelse og ændret dato/tid kan du bruge FindFirst. Mht. checksum kunne du evt. bruge MD5. Der findes flere MD5 units på nettet.
Avatar billede sorenriis Nybegynder
14. juni 2005 - 17:23 #6
Jeg får fejlmeddelelsen "project filcheck.exe raised exception EInOutError with message 'I/O Error 103'"
Avatar billede sorenriis Nybegynder
14. juni 2005 - 17:37 #7
Da jeg fjernede "CloseFile(FILCHECK);" så ser det ud til at køre igen...
Avatar billede sorenriis Nybegynder
14. juni 2005 - 18:05 #8
Nogle der kan henvise mig til en MD5-unit der er let at bruge (eller noget tilsvarende der kan lave en checksum af en fil)?

Har søgt lidt på google og jeg synes ikke lige jeg kan finde noget brugbart.
Avatar billede kroning Nybegynder
14. juni 2005 - 20:57 #9
Jeg har en som jeg ikke har haft problemer med indtil nu, jeg bruger den til SIP, men den kan også klare filer. Den fylder dog 450 linier og hjemmesiden http://www.endimus.com/md5 ser ikke ud til at virke, er den for stor til at poste her ellers kan jeg maile den til dig.
Avatar billede kroning Nybegynder
14. juni 2005 - 22:02 #10
Avatar billede sorenriis Nybegynder
14. juni 2005 - 23:48 #11
Godt nok noget af en fyr :)
Findes der ikke en lettere metode som kan tjekke om indholdet af en fil er ændret?
Avatar billede kroning Nybegynder
15. juni 2005 - 09:40 #12
Så kan du evt. bare checke dato/tid for den sidste gang den er ændret, det er self. hurtigere end som at skulle udregne en MD5 for filen.
Avatar billede sorenriis Nybegynder
15. juni 2005 - 10:21 #13
Det er desværre bare ikke nok.

Programmet fungerer på den måde at det tjekker filen (som gemmes af et pc-spil), hvert 30. sekund. Størrelse og sidst ændrede dato tjekker jeg, men det er bare ikke nok da spillet opdaterer filen selvom der ikke er foretaget ændringer. Så jeg er nødt til at tjekke selve indholdet af filen også - og her var ideen så at det skulle et checksum klare.
Avatar billede sorenriis Nybegynder
15. juni 2005 - 10:32 #14
Kan du forklare mig hvordan jeg bruger den md5-kode stump?

Tilføjer jeg bare MD5.pas til mit projekt og kører så MD5File('filnavn.txt')?
Avatar billede sorenriis Nybegynder
15. juni 2005 - 10:40 #15
Jeg har nu tilføjet MD5.pas til mit projekt.
Men når jeg forsøger at køre MD5File()-funktionen fra "unit1.pas", så skriver den at den ikke kender funktionen.

Hvordan får jeg den til at kigge efter den funktion (den ligger jo i md5.pas)?
Avatar billede sorenriis Nybegynder
15. juni 2005 - 10:43 #16
Det fandt jeg så selv ude af :D
Skulle bare skrive "MD5" under uses:)

Sidste ting (håber jeg):
Hvordan får jeg MD5File('filnavn') konverteret til en string?

function MD5File(const FileName: string): TMD5Digest;

type
PMD5Digest = ^TMD5Digest;
TMD5Digest = record
  case Integer of
  0: (A, B, C, D: LongInt);
  1: (v: array [0..15] of Byte);
end;
Avatar billede kroning Nybegynder
15. juni 2005 - 11:00 #17
Du bruger MD5DigestToStr funktionen f.eks.

MinStreng:=MD5DigestToStr(MD5File('filnavn'));
Avatar billede sorenriis Nybegynder
15. juni 2005 - 11:08 #18
Tusind tak.. Afgiver du lige et svar (gælder også jer andre hvis I vil have points)?
Avatar billede kroning Nybegynder
15. juni 2005 - 12:08 #19
k
Avatar billede arne_v Ekspert
15. juni 2005 - 14:48 #20
for FileExists delen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester