6

最後に使用したとき (1 年前) に正常に動作したと断言できる MATLAB スクリプトがあります。今、私はこのエラーを受け取ります:

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

私の理解が正しければ、スクリプトの他の場所で指定されたファイルを見つけられない、または開く(?)ことができません。これは正しいですか?もしそうなら、何が原因でしょうか?

4

11 に答える 11

11

fid(ファイル識別子) の出力ですfopen。これは整数ですが、ファイルに永続的に関連付けられているわけではありません。fopenを取得するには、を使用する必要がありますfid。や などのファイル関連の I/O コマンドで、間違ったfid(ファイル識別子)を使用しているようです。の付与に失敗しました。有効な通常のファイルの場合、成功すると、それ以上の整数が得られます。freadfscanffclosefopenfid-1fopenfid3

ただし、コードがなければ、バグやエラーの場所や内容を特定することはできません。MATLAB デバッガーを使用して、関連するコードfopen(そこにブレークポイントを設定し、プログラムを実行する) を関連するものまでシングルステップで実行し、 fcloseif fid(またはファイル識別子に使用する変数名) またはファイル識別子のデータ構造 (持っている場合) を確認できます。コード内の複数のファイル識別子) は、関連するfopenとの間の任意のポイントで変更されますfclose

于 2012-05-15T18:20:04.093 に答える
9

fopenに許可オプションを追加することで、この問題を自分で解決しました。http://www.mathworks.se/help/matlab/ref/fopen.htmlでわかるように、fopen の構文は次のとおりです。

fileID = fopen(filename,permission)

たとえば、可能なパーミッションは次のとおりです。'w' | 'a' | 'r+' | 'w+' | 'a+' | ...

'r' – ファイルを読み取り用に開きます。

'w' – 書き込み用に新しいファイルを開くか作成します。既存のコンテンツがある場合は破棄します。

'a' – 書き込み用に新しいファイルを開くか作成します。ファイルの末尾にデータを追加します。

'r+' – 読み書き用にファイルを開きます。

'w+' – 読み書き用に新しいファイルを開くか作成します。既存のコンテンツがある場合は破棄します。

'a+' – 読み書き用に新しいファイルを開くか作成します。ファイルの末尾にデータを追加します。

...

許可オプションなしで fopen を使用した場合、または 'r' (デフォルト) オプションを使用した場合、fopen はエラーである -1 を返します。私はこれで成功します:

fid=fopen('tmp.txt', 'w');
fid=fopen('tmp.txt', 'a');
于 2014-05-24T06:14:40.390 に答える
6

ASF ツールボックスのデモを開こうとしたときに、同じ問題が発生しました。管理者としてMatlabを実行すると(右クリックして開く)、この問題が解決したようです。

于 2013-12-31T12:58:35.813 に答える
6

この問題がありました。書き込もうとしていたファイルが大きすぎることが判明しました (それを格納するのに十分な空き容量がありませんでした)。ただし、プログラムは fclose の呼び出しまで失敗しませんでした。非常に紛らわしいです!

この診断をテストするには、スペースを解放するか、非常に小さなファイルを書き込んでみてください。

于 2012-10-19T08:21:49.073 に答える
3

fopen指定したファイルを読み書きする権限が MATLAB にないため、失敗する可能性があります。

あなた/MATLAB がすべての権限を持っている場所でファイルを開いてみてください (OS によって異なります)。

于 2013-06-13T16:01:15.537 に答える
1

また、存在しないディレクトリにファイルを作成しようとしたときにも発生します。mkdir('folderName')MATLAB 内で試すか、事前にディレクトリを作成してください。

于 2016-09-13T12:12:28.767 に答える
0

先頭にスラッシュがあるパスでも、同じエラーが発生する可能性があります。

filename = '/data/myfile.txt';

このエラーをスローしますが、

filename = 'data/myfile.txt';

エラーは発生しません。

于 2016-07-17T12:48:03.050 に答える
-3

また、スクリプトがファイルの末尾を超えて読み取ろうとしたときにも発生します。

于 2015-04-16T14:52:24.433 に答える