Newsgroup: it.comp.lang.pascal
Titolo: DOS unit - Gestire i msgg di errore

Dovrei fare in modo che un programma scriva un file (OutputF) in una
determinata directory (Cartella), scrivo
assign(OutputF,'c:\cartella\file.abc');
rewrite(OutputF);
se la directory 'cart1' esiste va tutto bene, se invece non esiste
il programma si blocca con un msg di errore, ad es:
runtime error 003 at 1234:5678
come faccio a comunicare all'utente che la directory non esiste
senza che il programma vada in tilt?
--
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
e-mail: 
cerch...@ciaoweb.it
 
33813...@tim.it
Bye byte, Cerchietto
La vita, senza una meta, è vagabondaggio
(Seneca)
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

 Function DirExist(DirName: String): Boolean;
  var
   s : string[64];
  begin
   GetDir(0,s);
  {$I-}
   ChDir (DirName);
   ChDir(s);
  {$I+}
   DirExist := (IOResult = 0) and (DirName <> '');
  end;
o simili....
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)

   end;
Grazie mille!! Funziona!!!! ma...
...qui divento pazzo!
Adesso mi spieghi perché il tuo codice funziona senza
che il programma si blocchi, mentre il mio
var Cartella:string;
begin
    Cartella:='c:\simone\prova';
    ChDir(Cartella);
end.
non va?
Anche tu hai usato "ChDir", ma non ti da nessun problema!
--
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
e-mail: 
cerch...@ciaoweb.it
 
33813...@tim.it
Bye byte, Cerchietto
La vita, senza una meta, č vagabondaggio
(Seneca)
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

se guardi nella funzione ci sono due "commenti" strani: {$I-}e {$I+}
non sono commenti (si riconoscono perche' iniziano tutti con un '$' )
ma sono "direttive di compilazione" e servono a attivare/disattivare
certe opzioni del compilatore.
La "I" in particolare si riferisce alla segnalazione degli errori di I/O,
cioe' disco/video/stampante etc etc:
tutte le funzioni I/O del TP restituiscono settano la variabile
IOResult a 0 (zero) se terminano correttamente, altrimenti ci mettono
un codice di errore.  Normalmente ( nello stato $I+ che vuol dire
I/O Cheching attivato ) se la variabile IOResult assume un valore > 0
automaticamente il programma termina, altrimenti ( stato $I- ) va
avanti.
la mia funz (un po' scopiazzata dall'help del tp dove ce n'e' una simile
ma per i files) "prova" a cambiare directory MA disattiva l' I/O Cheching
Cosi' posso controllare il risultato che la ChDir ha messo in IOResult
e dire se la directory esiste oppure no...
ok... forse non sono il massimo della chiarezza, magari guarda l'help del
tp sotto "$I: Input/Output Cheching Switch"
ciao


 certe opzioni del compilatore.
Avevo visto le parentesi graffe e credevo quindi venissero ignorati.
Non sapevo che queste direttive andavano messe tra parentesi graffe,
avevo provato ad utilizzarle senza le parentesi, ed il compilatore,
giustamente, mi dava un msg di errore.
Grazie per la lezione.
--
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
e-mail: 
cerch...@ciaoweb.it
 
33813...@tim.it
Bye byte, Cerchietto
La vita, senza una meta, è vagabondaggio
(Seneca)
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

Basta leggere l'help:
={$i}=
Enables or disables the automatic code generation that checks the result of
a call to an I/O procedure.
   Syntax:        {$I+} or {$I-}
   Default:       {$I+}
   Type:          Local
   Menu Command:  Options|Compiler|I/O Checking
Remarks:
If an I/O procedure returns a non-zero I/O result when the $I switch is on,
the program terminates, displaying a run-time error message.
/*
Se una procedura di I/O non va a buon fine restituendo un valore diverso da
0 e $i è stata abilitata ($i+), il programma termina, mostrando un messaggio
di errore.
*/
When the $I switch is off, you must use the IOResult function to check for
I/O errors.
/*
Quando $i non è abilitata, BISOGNA usare la funzione IOResult per
controllare gli errore di I/O
*/
=END=
..l'inglese non è mai stato il mio forte :-p
Spero di non aver commesso gravi errori di traduzione :)
Ciao ciao
--
KNOWLEDGE IS POWER
http://www.sverzat.com
http://www.viruspocalypse.f2s.com