PDA

Visualizza la versione completa : [ Delphi ] File di testo e DirListBox


piccaweb
11-07-2002, 08:49
Ho un problema con un file di testo!
Premetto che ho creato 2 procedure , una per scrivere sul file e l'altra per leggere il contenuto( le allego...)



Procedure ModificaFile(DirFile:String);
Var
Riga:string;
Procedi:boolean;
Pos:Integer;
FileExt1:text;

Begin
AssignFile(FileExt1,DirFile);
Procedi:=False;
Pos:=1;

Rewrite(FileExt1);
If IOResult = 0 Then
Procedi:=True
Else
begin
Procedi:=False;
MessageDlg('Impossibile accedere al file di setup ',mtError,
[mbOK],0);
end;
Riga:='';
If Procedi Then
repeat
Case Pos of
1:Riga:=U_Setup.F_Setup.DirectoryListBox1.Director y; //Memorizzo la directory dei Contratti

2:Riga:=U_Setup.F_Setup.DirectoryListBox2.Director y; //Memorizzo la directory dei Preventivi
End;
Writeln(FileExt1,Riga);
Riga:='';
Inc(Pos);
until Pos=3;

CloseFile(FileExt1);

end;

e


Procedure LetturaFile(DirFile:String);
Var
Riga:string;
Procedi:boolean;
Pos:Integer;
FileExt1:text;

Begin
AssignFile(FileExt1,DirFile);
Procedi:=False;
reset(FileExt1);
If IOResult = 0 Then
Procedi:=True
Else
begin
Procedi:=False;
MessageDlg('Impossibile accedere al file di setup ',mtError,
[mbOK],0);
end;
Pos:=1;
If Procedi Then
while not Eof(FileExt1) do
begin
Readln(FileExt1,Riga);
case Pos of
1:U_Setup.F_Setup.Edit1.Text:=Riga;//Leggo la directory dei Contratti

2:U_Setup.F_Setup.Edit2.Text:=Riga;//Leggo la directory dei Preventivi
end;
Inc(Pos)
end;
closeFile(FileExt1);
end;


Come potete notare passo come parametro il nome del file e fino qui tutto bene.
Ora il mio compito Ú quello di memorizzare nel file di testo il percorso di una cartella selezionata attraverso il componente TDirectoryListBox.
Naturalmente ho anche inserito il componente DriveListBox con la proprietÓ DirList uguale al nome del componente TDirectoryListBox!
Attraverso un bottone di conferma memorizzo in contenuto del file!
Ed ecco il problema: passando alle procedure la stringa 'setup.txt' il file vine letto correttamente mentre quando scrivo il file setup viene creato direttamente nella directory selezionata dal componente DirectoryListBox.!
Il file dovrebbe essere scritto nella cartella dove si trova l'eseguibile, invece no!
Come mai?


Ciao :ciauz:

alka
11-07-2002, 09:57
Intuitivamente, credo che l'uso della DirListBox (componente che non ho mai utilizzato) modifichi involontariamente la cartella corrente, impostandola a quella selezionata sul controllo.
Ad ogni modo, per scrivere file di testo ti suggerisco di utilizzare la classe TStringList, la stessa classe utilizzata nel controllo TMemo per salvare le linee di testo. Il codice Ŕ molto pi¨ compatto e meno complesso di quello abituale Pascal di accesso ai file:


procedure TForm1.Button1Click(Sender: TObject);
var
s: TStringList;
begin
s := TStringList.Create;
try
s.Add('aaa');
s.Add('bbb');
s.SaveToFile('file.txt');
finally
s.Free;
end;
end;

Nel codice riportato sopra, viene creata un'istanza della classe TStringList, si aggiungono righe di testo con il metodo Add e si salva tutto quanto in un file tramite il metodo SaveToFile. Il costrutto try...finally consente di proteggere le risorse nel caso in cui si verifichi un errore durante l'operazione.

Ciao! :ciauz:

piccaweb
11-07-2002, 10:16
Ok! Adesso provo...
Per leggere il file posso usare una struttura del genere?

GRazie
:ciauz:

piccaweb
11-07-2002, 10:24
Non funziona!
Stesso errore di prima.
Consigliamo un componente in grado di navigare attraverso le directory o qualcosa del genere!

Grazie:ciauz:

piccaweb
11-07-2002, 10:31
Ho ancora un'altra domanda da porti...
Io come connessione al Db uso ADO ma mi da molti problemi quando inserisco un nuovo record e dalla disperazione dono disposto a cambiare struttura !

Solo che non so cosa scegliere tenendo conto che il programma deve funzionare su altri 4 computer dove non posso installare BDE!

Cosa mi consigli?

alka
11-07-2002, 10:43
Il metodo che ti ho indicato era solo un modo pi¨ elegante di accedere ai file di testo; ovviamente, puoi utilizzare la classe TStringList anche per caricare testo da un file, tramite il metodo LoadFromFile.
Questo approccio non risolve comunque il tuo problema, dovuto al fatto che il componente TDirectoryListBox modifica la cartella corrente quando selezioni un nuovo percorso.
Quindi, qualsiasi metodo tu scelga di utilizzare per salvare il file di testo, devi utilizzare un nome di file completo di percorso assoluto per garantire che il testo venga salvato dove vuoi tu.
Potresti tentare di utilizzare la proprietÓ ExeName dell'oggetto Application, la quale contiene il nome del file eseguibile che rappresenta l'applicazione preceduta dal percorso completo; usata in congiunzione con la funzione ExtractFilePath, pu˛ permetterti di estrarre la cartella di lavoro dell'applicazione stessa. Un esempio d'uso:


ExtractFilePath(Application.ExeName)

Ti restituisce il percorso dell'applicazione che termina con il carattere "/". Prova e mi saprai dire.

Per quanto riguarda il problema con il motore di accesso ai database, se utilizzi Microsoft Access, l'unica alternativa ad ADO potrebbe essere dbExpress, il nuovo motore introdotto in Delphi da Borland per la portabilitÓ dei progetti...anche se non ho ancora avuto il modo di farne uso. Non ne conosco altri, a parte il BDE che purtroppo mi hai precluso! :)
A proposito, perchŔ non puoi installare il BDE??

Ciao! :ciauz:

piccaweb
11-07-2002, 10:48
I computer non essendo miei , ma di terzi che hanno richiesto il programma, non vorrei creare qualche disordine "tecnico" al loro interno!

Posso cmq installare BDE senza installare il programma Delphi?

piccaweb
11-07-2002, 10:53
Per il file di testo mi hai risolto il problema!
Grazie...:ciauz:

alka
11-07-2002, 10:53
Non esiste un setup separato per il BDE. In genere, viene installato quando crei un progetto di setup con InstallShield Express Limited Edition, la versione di InstallShield inclusa nel CD di Delphi.
Tu non disponi di un programma di installazione per il tuo applicativo? In ogni caso, sono riuscito a creare uno pseudoprogramma di installazione anche per il BDE (assestante): ho creato un progetto di installazione scegliendo solo i componenti per il BDE, ma senza specificare alcun progetto Delphi.

Ciao! :ciauz:

piccaweb
11-07-2002, 10:58
Quindi se dovessi creare un eseguibile che installa il mio programma , verrebbe inserito anche il BDE in automatico o sbaglio?

Loading