J'ai un script MATLAB que j'aurais juré de bien fonctionner la dernière fois que je l'ai utilisé (il y a un an). Maintenant, je reçois cette erreur:
Invalid file identifier. Use fopen to generate a valid file identifier.
Si je comprends bien, il ne parvient pas à trouver ou à ouvrir (?) Un fichier spécifié ailleurs dans le script. Est-ce correct? Si oui, quelle pourrait en être la cause?
fid
(identificateur de fichier) est la sortie de fopen
. C'est un entier, mais pas lié au fichier en permanence. Vous devez utiliser fopen
pour obtenir fid
. Il me semble que vous utilisez une variable fid
(identificateur de fichier) incorrecte dans certaines commandes d'E/S associées aux fichiers, telles que fread
, fscanf
ou fclose
. En cas d'échec, fopen
donne fid
de -1
. Pour tout fichier normal valide, fopen
donnera fid
qui est 3
ou un entier plus grand.
Cependant, sans code, il est impossible de dire où et quel est le bogue ou l'erreur. Vous pouvez utiliser le débogueur MATLAB pour exécuter en une seule étape le code de la variable fopen
pertinente (définir le point d'arrêt et exécuter votre programme) jusqu'à la variable fclose
correspondante et voir si fid
(ou le nom de variable que vous utilisez pour l'identificateur de fichier) ou toute structure de données pour vos identificateurs de fichier. (si vous avez plusieurs identifiants de fichier dans votre code) change en tout point entre les variables fopen
et fclose
pertinentes.
J'ai résolu ce problème moi-même en ajoutantpermission option à fopen . Comme vous le voyez dans http: //www.mathworks .se/help/matlab/ref/fopen.html , la syntaxe fopen est la suivante:
fileID = fopen(filename,permission)
Les autorisations possibles, par exemple, sont: 'R' (par défaut) | 'w' | 'a' | 'r +' | 'w +' | 'a +' | ...
'r' - Ouvre le fichier en lecture.
'w' - Ouvre ou crée un nouveau fichier pour l'écriture. Jeter le contenu existant, le cas échéant.
'a' - Ouvrez ou créez un nouveau fichier pour l'écriture. Ajouter des données à la fin du fichier.
'r +' - Ouvre un fichier pour la lecture et l'écriture.
'w +' - Ouvre ou crée un nouveau fichier pour la lecture et l'écriture. Jeter le contenu existant, le cas échéant.
'a +' - Ouvre ou crée un nouveau fichier pour la lecture et l'écriture. Ajouter des données à la fin du fichier.
...
Si j'utilise l'option fopen sans permission, ou si j'utilise l'option 'r' (par défaut), fopen renverra -1, ce qui est une erreur. Je réussis avec ceci:
fid=fopen('tmp.txt', 'w');
fid=fopen('tmp.txt', 'a');
J'ai eu ce problème. Il s’est avéré que le fichier que j’essayais d’écrire était trop volumineux (je ne disposais pas de suffisamment d’espace libre). Cependant, le programme n'a échoué que lorsque l'appel à fermer. Très perturbant!
Essayez de libérer de l'espace ou d'écrire un très petit fichier pour tester ce diagnostic.
J'ai rencontré le même problème en essayant d'ouvrir des démos de boîtes à outils ASF. Exécuter Matlab en tant qu'administrateur (clic droit pour l'ouvrir) semblait résoudre ce problème pour moi.
fopen
peut échouer car MATLAB ne dispose pas des autorisations pour lire/écrire le fichier que vous avez spécifié.
Essayez d’ouvrir un fichier à un emplacement où/MATLAB a tous les droits (en fonction de votre système d’exploitation).
J'ai utilisé fopen
avec permission et la même erreur s'est produite. Cependant, j'ai commencé MATLAB en tant qu'administrateur et cela a résolu le problème.
J'avais le fichier ouvert dans Excel et par conséquent, fopen a renvoyé -1. Il m'a fallu une éternité pour trouver un problème aussi trivial.
Le chemin avec une barre oblique au début peut provoquer la même erreur.
filename = '/data/myfile.txt';
jette cette erreur, alors que
filename = 'data/myfile.txt';
ne produit pas d'erreur.
Cela se produit également lorsque vous essayez de créer un fichier dans un répertoire inexistant. Essayez mkdir('folderName')
dans MATLAB ou créez simplement le répertoire au préalable.