web-dev-qa-db-ja.com

MATLABで無効なファイル識別子が発生する原因は何ですか?

前回(1年前)使用したときに正常に機能することを誓ったMATLABスクリプトがあります。今、私はこのエラーを受け取ります:

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

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

5
nikipedia

fid(ファイル識別子)はfopenの出力です。これは整数ですが、ファイルと永続的には関係ありません。 fopenを取得するには、fidを使用する必要があります。 fidfreadfscanfなどのファイル関連のI/Oコマンドで誤ったfclose(ファイル識別子)を使用しているようです。失敗したfopenは、-1fidを与えます。有効な通常のファイルが成功すると、fopenは、3以上の整数であるfidを返します。

ただし、コードがないと、バグやエラーがどこにあるのか、何であるのかを判断することはできません。 MATLABデバッガーを使用して、関連するfopen(ブレークポイントを設定してプログラムを実行)から関連するfcloseまでコードをシングルステップし、fid(またはファイル識別子に使用する変数名)またはファイル識別子のデータ構造を確認できます。 (コードに複数のファイル識別子がある場合)関連するfopenfcloseの間の任意のポイントでの変更。

10
nrz

permissionoptionに追加することで、この問題を自分で解決しました)fopenhttp://www.mathworks.se/help/matlab/ref/fopen.html にあるように、fopenの構文は次のとおりです。

fileID = fopen(filename,permission)

たとえば、可能な権限は次のとおりです。'r '(デフォルト)| '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');
8
Mindaugas

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

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

6
mp4man

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

6
Aaki

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

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

3

許可を得てfopenを使用しましたが、同じエラーが発生しました。しかし、私はMATLABをadminとして起動しましたそしてそれで問題は解決しました。

1
abdul_penn

ファイルをExcelで開いた結果、fopenは-1を返しました。そのような些細な問題を見つけるために私を永遠に連れて行った。

0
masaguchi46

最初にスラッシュが付いているパスでも、同じエラーが発生する可能性があります。

filename = '/data/myfile.txt';

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

filename = 'data/myfile.txt';

エラーは発生しません。

0
Felix Solomon

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

0
Juan Terven