Avatar billede hermandsen Juniormester
11. december 2001 - 17:25 Der er 4 kommentarer og
2 løsninger

try-except-finally

Hej eksperter!

Jeg sad med et det problem at jeg skulle lave noget i den her retning:

procedure FilTing(InFilS, OutFilS: String);
var
  InFil, OutFil: file;
begin
  FileMode := 0;
  AssignFile(InFil, InFilS);
  Reset(InFile, 1);

  FileMode := 2;
  AssignFile(OutFil, OutFilS);
  if FileExists(OutputFile) then
    Reset(ToFile, 1)
  else Rewrite(ToFile, 1);

  try
    repeat
      BlockRead(FromFile, Buf, SizeOf(Buf), NumRead);
      BlockWrite(ToFile, Buf, NumRead, NumWritten);
    until (NumRead = 0) or (NumWritten <> NumRead);

  finally
    CloseFile(InFile);
    CloseFile(OutFile);
  end;
end;

Det fungerede jo fint nok. Problemet var bare at jeg gerne ville opsnappe fejlen så brugeren ikke skulle udsættes for den. Altså noget i retning af:

  try
    ...
  except //for at opsnappe fejl
    ...
  finally
    ...
  end;

Men det kunne jeg så ikke. Jeg har løst problemet ved bare at bruge except og så sætte

  CloseFile(InFile);
  CloseFile(OutFile);

efter try except end;

Jeg vil dog gerne vide om det er muligt at bruge try-except-finally på en gang.

Er det det?
Avatar billede gusse Nybegynder
11. december 2001 - 17:31 #1
ja det er det

try
  try
  except
  end;
finally
end;
Avatar billede hreiff Nybegynder
12. december 2001 - 11:09 #2
Hvorfor bruger du try - finally?
Det ser ud til at du under alle omstændigheder skal lukke filerne, så du skal vel bare bruge:

  Try
    repeat
      BlockRead(FromFile, Buf, SizeOf(Buf), NumRead);
      BlockWrite(ToFile, Buf, NumRead, NumWritten);
    until (NumRead = 0) or (NumWritten <> NumRead);

  except
    ... evt. showmessage(\'Fejl\');
    ... eller check om kopiering forløb korrekt.
  end;

  CloseFile(InFile);
  CloseFile(OutFile);

Men ellers må du gøre som qusse foreslår
Avatar billede hermandsen Juniormester
12. december 2001 - 11:45 #3
/hreiff
Det var sådan set også lige præcis det jeg havde gjort! Det virkede jo, ingen problemer... Jeg er sådan set bare nysgerrig om det er muligt at bruge try-except-finally.

/gusse
Jah, det kunne man selvfølgelig gøre, men det var ikke det jeg mente. Jeg ville bruge det hele på en gang.
Altså undvære try anden gang.

try
  try
  except
  end;
finally
end;

Kan det laves om til

  try
  except
  finally
  end;
Avatar billede gusse Nybegynder
12. december 2001 - 11:48 #4
nope, du prøvede right ? og den brokker sig, sååå du må lige bruge dine krafter på at trykke ekstra 3 gange på tastaturet :)
Avatar billede hermandsen Juniormester
12. december 2001 - 12:09 #5
Damn... Nå nå... Ærgeligt...

Men man må vel nøjes! Slut på dette spørgsmål!
Avatar billede hermandsen Juniormester
12. december 2001 - 12:11 #6
Du får 15 point for dit svar... Jeg kom da lidt videre, meeeen det var var jo ikke helt det svar jeg havde håbet på! :)
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