2012-05-15 17 views
5

Tengo un script de MATLAB que podría haber jurado que funcionó bien la última vez que lo usé (hace un año). Ahora, me sale este error:¿Qué causa un identificador de archivo no válido en MATLAB?

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

Si he entendido bien, está fallando para encontrar o abrir un archivo especificado en otra parte de la secuencia de comandos (?). ¿Es esto correcto? Si es así, ¿qué podría causarlo?

+2

El error siempre debe asociarse con una determinada línea de código fuente. Úselo para identificar el problema. –

+3

¿Es posible que su archivo no esté en su directorio de trabajo actual o en su ruta de acceso de matlab en alguna parte? – kitchenette

+0

Volví a la línea que señalaba el error, pero no veo ningún problema con ella. – nikipedia

Respuesta

10

fid (identificador de archivo) es la salida de fopen. Es un número entero, pero no está relacionado con el archivo de forma permanente. Debe utilizar fopen para obtener el fid. Me parece que está utilizando el fid incorrecto (identificador de archivo) en algún comando de E/S relacionado con archivos, como fread, fscanf o fclose. Falló fopen da fid de -1. Para cualquier archivo válido válido, fopen dará fid que es 3 o un número entero mayor.

Sin embargo, sin ningún código es imposible decir dónde o cuál es el error o error. Puede usar el depurador MATLAB para pasar el código desde el relevante fopen (establecer punto de interrupción allí y ejecutar su programa) hasta el fclose relevante y ver si fid (o cualquier nombre de variable que use para el identificador de archivo) o cualquier estructura de datos para sus identificadores de archivos (si tiene más de un identificador de archivo en su código) cambia en cualquier punto entre los correspondientes fopen y fclose.

6

Tuve este problema. Resultó que el archivo que estaba tratando de escribir era demasiado grande (no tenía suficiente espacio libre para acomodarlo). Sin embargo, el programa no falló hasta la llamada para cerrar. ¡Muy confuso!

Intente liberar algo de espacio, o escribir un archivo muy pequeño, para probar este diagnóstico.

3

fopen pueden fallar porque MATLAB no tiene los permisos para leer/escribir el archivo que ha especificado.

Intente abrir un archivo en una ubicación donde usted/MATLAB tienen todos los derechos (según su sistema operativo).

0

Tenía el archivo abierto en excel y como resultado fopen devolvió un -1. me llevó para siempre para encontrar un problema tan trivial.

6

Tuve el mismo problema al intentar abrir las demostraciones de la caja de herramientas ASF. Ejecutar Matlab como administrador (hacer clic con el botón derecho para abrir) pareció resolver este problema para mí.

8

He resuelto este problema para mí mismo mediante la adición de la opción permiso a fopen. Como se ve en http://www.mathworks.se/help/matlab/ref/fopen.html, la sintaxis es fopen:

fileID = fopen(filename,permission) 

posibles permisos, por ejemplo, son: 'r' (por defecto) | 'w' | 'a' | 'r +' | 'w +' | 'a +' | ...

'r' - Abrir archivo para leer.

'w' - Abre o crea un archivo nuevo para escribir. Deseche los contenidos existentes, si los hay.

'a' - Abra o cree un archivo nuevo para escribir. Anexar datos al final del archivo.

'r +' - Abrir archivo para leer y escribir.

'w +' - Abre o crea un nuevo archivo para leer y escribir. Deseche los contenidos existentes, si los hay.

'a +' - Abre o crea un nuevo archivo para leer y escribir. Anexar datos al final del archivo.

...

Si uso fopen sin opción de permiso, o si uso 'r' (por defecto) opción, fopen devolverá -1, lo cual es un error. Tengo éxito con esto:

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

Estoy usando el permiso 'rt', fid = fopen (offfullname, 'rt'), pero sigue obteniendo fid = -1, y el mismo error es "identificador de archivo no válido" que el autor está obteniendo. ¡Solía ​​funcionar bien incluso hace una semana! –

-3

También ocurre cuando un script intenta leer más allá del final del archivo.

+0

No. Incorrecto. Lo siento. – rayryeng

0

La ruta con una barra inclinada al principio puede causar el mismo error.

filename = '/data/myfile.txt'; 

tiros este error, mientras que

filename = 'data/myfile.txt'; 

no produce un error.

0

También ocurre al intentar crear un archivo en un directorio inexistente. Pruebe mkdir('folderName') dentro de MATLAB o simplemente cree el directorio de antemano.

1

He usado fopen con permiso y se produjo el mismo error. Sin embargo, I inició MATLAB como administrador y se encargó del problema.

Cuestiones relacionadas