fscanf - ¿Qué causa un identificador de archivo no válido en MATLAB?
fwrite matlab (10)
Me encontré con el mismo problema al tratar de abrir demos de herramientas de ASF. Ejecutar Matlab como administrador (hacer clic con el botón derecho para abrir) pareció resolver este problema para mí.
Tengo un guión de MATLAB que podría haber jurado haber funcionado bien la última vez que lo usé (hace un año). Ahora, obtengo este error:
Invalid file identifier. Use fopen to generate a valid file identifier.
Si lo entiendo correctamente, está fallando al encontrar o abrir (?) Un archivo especificado en otra parte del script. ¿Es esto correcto? Si es así, ¿qué podría causarlo?
fid
(identificador de archivo) es la salida de fopen
. Es un número entero, pero no está relacionado con el archivo de forma permanente. Necesitas usar fopen
para obtener el fid
. Me parece que está utilizando fid
(identificador de archivo) incorrecto en algún comando de E / S relacionado con archivos, como fread
, fscanf
o fclose
. El fopen
éxito da fid
de -1
. Para cualquier archivo normal válido, fopen
exitoso dará fid
que es 3
o mayor entero.
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 fopen
relevante (establecer el punto de interrupción allí y ejecutar su programa) hasta el fclose
pertinente y ver si fid
(o el 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 fopen
y fclose
relevantes.
Tuve este problema Resultó que el archivo que intentaba 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.
fopen
puede 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 tenga todos los derechos (según su sistema operativo).
Tuve el archivo abierto en Excel y, como resultado, fopen devolvió un -1. Me llevó para siempre para encontrar un problema tan trivial.
Resolví este problema por mí mismo al agregar la opción de permiso para abrir . Como puede ver en http://www.mathworks.se/help/matlab/ref/fopen.html , la sintaxis de fopen es:
fileID = fopen(filename,permission)
Posibles permisos, por ejemplo son: ''r'' (predeterminado) | ''w'' | ''a'' | ''r +'' | ''w +'' | ''a +'' | ...
''r'' - Abrir archivo para leer.
''w'' - Abre o crea un nuevo archivo para escribir. Deseche los contenidos existentes, si los hay.
''a'' - Abre o crea un nuevo archivo 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 la opción de permiso, o si uso la opción ''r'' (predeterminada), fopen devolverá -1, que es un error. Tengo éxito con esto:
fid=fopen(''tmp.txt'', ''w'');
fid=fopen(''tmp.txt'', ''a'');
La ruta con una barra inclinada al principio puede causar el mismo error.
filename = ''/data/myfile.txt'';
arroja este error, mientras
filename = ''data/myfile.txt'';
no produce un error
He usado fopen
con permiso y salió el mismo error. Sin embargo, comencé MATLAB como administrador y eso solucionó el problema.
También ocurre cuando intentas crear un archivo en un directorio inexistente. Pruebe mkdir(''folderName'')
dentro de MATLAB o simplemente cree el directorio de antemano.
También ocurre cuando un script intenta leer más allá del final del archivo.