2012-05-15 12 views
5

Ich habe ein MATLAB-Skript, das ich hätte schwören können, das letzte Mal, als ich es benutzt (vor einem Jahr). Jetzt erhalte ich diese Fehlermeldung:Was verursacht eine ungültige Dateikennung in MATLAB?

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

Wenn ich richtig verstehe, ist es nicht gelingt oder offen finden eine Datei an anderer Stelle im Skript angegeben (?). Ist das richtig? Wenn ja, was könnte das verursachen?

+2

Der Fehler sollte assoziiert sich immer mit einer bestimmten Zeile des Quellcodes. Verwenden Sie das, um das Problem zu identifizieren. –

+3

Ist es möglich, dass sich Ihre Datei nicht in Ihrem aktuellen Arbeitsverzeichnis oder in Ihrem Matlab-Pfad befindet? – kitchenette

+0

Ich ging zurück zu der Zeile, auf die der Fehler hinwies, aber ich sehe keine Probleme damit. – nikipedia

Antwort

10

fid (Dateikennung) ist die Ausgabe von fopen. Es ist eine ganze Zahl, aber nicht permanent mit der Datei verbunden. Sie müssen verwenden, um die zu erhalten. Es scheint mir, dass Sie falsche fid (Dateikennung) in einem Datei-bezogenen E/A-Befehl verwenden, z. B. fread, fscanf oder fclose. Erfolglos ergibt fid von -1. Für jede gültige normale Datei erfolgreich wird fid geben, das ist 3 oder größere Ganzzahl.

Aber ohne Code ist es unmöglich zu sagen, wo oder was der Fehler oder Fehler ist. Sie können den MATLAB Debugger verwenden, um den Code aus dem relevanten (setzen Sie dort einen Breakpoint und führen Sie Ihr Programm) bis fclose und sehen Sie, ob fid (oder welcher Variablenname Sie für die Dateikennung verwenden) oder eine Datenstruktur für Ihre Dateikennungen (Wenn in Ihrem Code mehrere Dateibezeichner vorhanden sind) ändert sich der Punkt zwischen den relevanten fopen und fclose.

6

Ich hatte dieses Problem. Es stellte sich heraus, dass die Datei, die ich schreiben wollte, zu groß war (ich hatte nicht genug freien Platz, um sie aufzunehmen). Das Programm scheiterte jedoch erst beim Schließen der Verbindung. Sehr verwirrend!

Versuchen Sie, Speicherplatz freizugeben oder eine sehr kleine Datei zu schreiben, um diese Diagnose zu testen.

3

fopen kann fehlschlagen, da MATLAB nicht die Berechtigung zum Lesen/Schreiben der von Ihnen angegebenen Datei hat.

Versuchen Sie, eine Datei an einem Ort zu öffnen, an dem Sie/MATLAB alle Rechte haben (abhängig von Ihrem Betriebssystem).

0

Ich hatte die Datei in Excel geöffnet und als Ergebnis gab fopen eine -1 zurück. Nahm mich für immer so ein triviales Problem zu finden.

6

Ich stieß auf das gleiche Problem beim Versuch, ASF Toolbox Demos zu öffnen. Matlab als Administrator auszuführen (Rechtsklick zum Öffnen) schien dieses Problem für mich zu lösen.

8

löste ich dieses Problem für mich selbst von Erlaubnis Option zu fopen hinzufügen. Wie Sie in http://www.mathworks.se/help/matlab/ref/fopen.html, fopen Syntax sehen ist:

fileID = fopen(filename,permission) 

Mögliche Berechtigungen, zum Beispiel sind: 'r' (default) | 'w' | 'a' | 'r +' | 'w +' | 'a +' | ...

'r' - Datei zum Lesen öffnen.

'w' - Öffnen oder erstellen Sie eine neue Datei zum Schreiben. Verwerfen Sie vorhandene Inhalte, falls vorhanden.

'a' - Öffnen oder erstellen Sie eine neue Datei zum Schreiben. Fügen Sie Daten an das Ende der Datei an.

'r +' - Öffnen Sie die Datei zum Lesen und Schreiben.

'w +' - Öffnen oder erstellen Sie eine neue Datei zum Lesen und Schreiben. Verwerfen Sie vorhandene Inhalte, falls vorhanden.

'a +' - Öffnen oder erstellen Sie eine neue Datei zum Lesen und Schreiben. Fügen Sie Daten an das Ende der Datei an.

...

Wenn ich ohne Erlaubnis Option fopen verwenden, oder wenn ich 'r' (Standard) Option verwenden, wird fopen -1 zurückgeben, welcher Fehler ist. I Erfolg mit diesem:

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

ich die Erlaubnis ‚rt‘, fid = fopen (offfullname, ‚rt‘) verwendet wird, aber immer noch fid bekommen = -1, und der gleiche Fehler „ungültige Dateikennung“ als Autor erhält. Es hat schon vor einer Woche funktioniert! –

-3

Es tritt auch auf, wenn ein Skript versucht, über das Ende der Datei hinaus zu lesen.

+0

Nein. Falsch. Es tut uns leid. – rayryeng

0

Der Pfad mit einem Schrägstrich am Anfang kann den gleichen Fehler verursachen.

filename = '/data/myfile.txt'; 

wirft diesen Fehler, während

filename = 'data/myfile.txt'; 

keinen Fehler erzeugen.

0

Es passiert auch beim Versuch, eine Datei in einem nicht vorhandenen Verzeichnis zu erstellen. Versuchen Sie mkdir('folderName') in MATLAB oder erstellen Sie das Verzeichnis zuvor.

1

Ich habe mit Erlaubnis verwendet und der gleiche Fehler kam heraus. Aber ich begann MATLAB als admin und kümmerte sich um das Problem.

Verwandte Themen