2012-05-15 11 views
5

Ho uno script MATLAB che avrei potuto giurare funzionato bene l'ultima volta che l'ho usato (un anno fa). Ora, ottengo questo errore:Cosa causa un identificatore di file non valido in MATLAB?

Invalid file identifier. Use fopen to generate a valid file identifier. 

Se ho capito bene, si riesce a trovare o aprire un file specificato altrove nello script (?). È giusto? Se sì, cosa potrebbe causarlo?

+2

L'errore dovrebbe sempre associarsi a una particolare riga di codice sorgente. Usalo per identificare il problema. –

+3

È possibile che il tuo file non si trovi nella tua attuale directory di lavoro o nel tuo percorso matlab da qualche parte? – kitchenette

+0

Sono tornato alla riga a cui puntava l'errore, ma non vedo alcun problema con esso. – nikipedia

risposta

10

fid (identificativo file) è l'uscita di fopen. È un numero intero, ma non correlato al file in modo permanente. È necessario utilizzare fopen per ottenere lo fid. Mi sembra che stai usando fid (identificatore di file) errato in alcuni comandi I/O relativi ai file, come ad esempio fread, fscanf o fclose. Non riuscito fopenfid di -1. Per qualsiasi file valido valido con esito positivo fopen darà fid ovvero 3 o numero intero maggiore.

Tuttavia, senza alcun codice è impossibile dire dove o quale sia l'errore o l'errore. È possibile utilizzare il debugger di MATLAB per eseguire il single-step del codice dal relativo fopen (impostare il punto di interruzione lì ed eseguire il programma) fino al relativo fclose e verificare se fid (o qualsiasi altro nome di variabile utilizzato per l'identificatore di file) o qualsiasi struttura di dati per i propri identificatori di file (se hai più di un identificatore di file nel tuo codice) cambia in qualsiasi punto tra i relativi fopen e fclose.

6

Ho avuto questo problema. Si è scoperto che il file che stavo cercando di scrivere era troppo grande (non avevo abbastanza spazio libero per sistemarlo). Tuttavia, il programma non ha avuto esito negativo fino alla chiamata a fclose. Molto confuso!

Provare a liberare spazio o scrivere un file molto piccolo per testare questa diagnosi.

3

fopen può non riuscire perché MATLAB non dispone delle autorizzazioni per leggere/scrivere il file specificato.

Prova ad aprire un file in una posizione in cui tu/MATLAB hai tutti i diritti (a seconda del tuo sistema operativo).

0

Avevo il file aperto in Excel e, di conseguenza, fopen ha restituito un -1. Mi ha preso per sempre per trovare un problema così insignificante.

6

Ho riscontrato lo stesso problema durante il tentativo di aprire demo ASF toolbox. Eseguire Matlab come amministratore (tasto destro per aprire) sembrava risolvere questo problema per me.

8

ho risolto questo problema per la mia auto con l'aggiunta di permesso opzione a fopen. Come potete vedere nella http://www.mathworks.se/help/matlab/ref/fopen.html, la sintassi è fopen:

fileID = fopen(filename,permission) 

autorizzazioni possibili, ad esempio sono: 'r' (default) | 'w' | 'a' | 'r +' | 'w +' | 'a +' | ...

'r' - Apre il file per la lettura.

'w' - Apre o crea un nuovo file per la scrittura. Scarta i contenuti esistenti, se ce ne sono.

'a' - Aprire o creare un nuovo file per la scrittura. Aggiungi dati alla fine del file.

'r +' - Apri file per la lettura e la scrittura.

'w +' - Apre o crea un nuovo file per la lettura e la scrittura. Scarta i contenuti esistenti, se ce ne sono.

'a +' - Apre o crea un nuovo file per la lettura e la scrittura. Aggiungi dati alla fine del file.

...

Se uso fopen opzione il permesso, senza, o se uso 'r' opzione (di default), fopen tornerò -1, che è l'errore. Ho successo con questo:

fid=fopen('tmp.txt', 'w'); 
fid=fopen('tmp.txt', 'a'); 
+0

Sto usando il permesso 'rt', fid = fopen (offfullname, 'rt'), ma sto ancora ottenendo fid = -1, e lo stesso errore "identificatore di file non valido" come sta ottenendo l'autore. Ha funzionato bene anche una settimana fa! –

-3

Si verifica anche quando uno script tenta di leggere oltre la fine del file.

+0

No. Sbagliato. Scusate. – rayryeng

0

Il percorso con una barra in avanti all'inizio può causare lo stesso errore.

filename = '/data/myfile.txt'; 

tiri questo errore, mentre

filename = 'data/myfile.txt'; 

non produce un errore.

0

Accade anche quando si tenta di creare un file in una directory inesistente. Prova con mkdir('folderName') in MATLAB o semplicemente crea la directory in anticipo.

1

Ho usato fopen con permesso e lo stesso errore è venuto fuori. Tuttavia, I ha avviato MATLAB come amministratore e questo ha risolto il problema.

Problemi correlati