Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    136

    [C++] - CFileDialog : conflitto con altri file..

    Sto lavorando ad un progetto MFC multipleviews in visual c++ 6.

    Ho la necessità di ricavare il path di un file di testo, che in seguito devo utilizzare.
    Per ricavare il path faccio cosi :
    codice:
    CFileDialog dlg(TRUE,NULL,NULL,OFN_EXPLORER|OFN_ENABLESIZING|OFN_READONLY|OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST,"File Txt(*.TXT)|*.txt||",0);
    	if (dlg.DoModal() == IDOK){
    		CString filePath = dlg.GetPathName();
    	}
    Cosi funziona tutto, solo che poi se faccio altre operazioni su file, anche in un alrta view, quando chiamo la fclose di un file (qualsiasi) mi da errore.
    piu precisamente :
    [CODE ]
    Expression: stream!=NULL

    Si è verificato l'errore di exception unknow software exception (0x80000003) nell'applicazione alla posizione 0x102189a1
    [/CODE]

    Ci dev'essere qualcosa che ha a che fare con CFileDialog, perchè provando ad inizializzare la variabile filePath con il percorso ("c:\file.txt") funziona tutto correttamente e non mi da errori nella chiusura di altri file.

    Non capisco cosa possa essere..
    Sembra come che la dlg.DoModal() apra un file e non lo chiuda, e quando voglio andare io a chiudere un altro file, mi da errore.. ma mi smebra una cosa un po surreale..

  2. #2

    Re: [C++] - CFileDialog : conflitto con altri file..

    Originariamente inviato da emi81

    Non capisco cosa possa essere..
    Sembra come che la dlg.DoModal() apra un file e non lo chiuda, e quando voglio andare io a chiudere un altro file, mi da errore.. ma mi smebra una cosa un po surreale..
    La funzione DoModal() della classe CFileDialog non apre il file; una volta ottenuto il path con dlg.GetPathName(), il file va aperto esplicitamente con fopen ( ma ti consiglio di usare la classe CStdioFile per la gestione dei file in MFC ).

    Sembra che l'errore sia dovuto al fatto che tenti di chiudere un file che non è mai stato aperto.


  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    136
    Sembra che l'errore sia dovuto al fatto che tenti di chiudere un file che non è mai stato aperto.
    Hai ragione!
    ora devo capire perchè non me lo apre.....

    anche perche questo errore è dovuto a una cosa che non centra niente con la CFileDialog.
    solo che se faccio quell'operazione poi dopo le alrte funzioni mi danno tutte questo errore..

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    136
    io devo creare file di testo con identificativo progressivo e faccio in questo modo :
    codice:
    FILE	*file;
    
    sprintf (buffer, "prova%i.txt", cont); 
    
    file = fopen(buffer,"w");
    if (file != NULL) {
    	fprintf (file, "hello world");
    	fclose(file);
    }
    else  return -1;
    dove cont è una varibile che incremento

    In questo modo il file "prova%i.txt", che prima non esiste, viene creato in automatico.
    e tutto questo funziona correttamente fino a quando non apro una dialogbox che serve per settare dei parametri. qui faccio aprore la finestra per selezionare il file.
    Quando torno alla finestra in cui faccio ripartire le operazioni di apertura e salvataggio del file non mi crea piu i file "prova%i.txt", mah...

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    136
    Ho trovato finalmente l'errore!


    La funzione DoModal() della classe CFileDialog non apre il file; una volta ottenuto il path con dlg.GetPathName(), il file va aperto esplicitamente con fopen
    Non apre il file, ma setta come path di partenza per l'applicazione, il path dove si trova il file che ho selezionato.
    Infatti i file che voglio aprire con la CFileDialog possono trovarsi in qualsiasi zona del conmputer, mentre i file "prova%i" che voglio andare a salvare li voglio andare a salvare in una cartella ben precisa che si trova dove c'è il file eseguibile del mio programma.


    Quindi facendo la CFileDialog setto ho il punto di partenza del path differente, e quando lancio :
    [code]
    file = fopen("./cartella/prova.txt", "w");
    [code]
    non mi apre il file perchè non trova la cartella.


    Per risolvere il problema bisogna aggiungere OFN_NOCHANGEDIR ai vari flag del CFileDialog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.