前回(1年前)使用したときに正常に機能することを誓ったMATLABスクリプトがあります。今、私はこのエラーを受け取ります:
Invalid file identifier. Use fopen to generate a valid file identifier.
私が正しく理解していれば、スクリプトの他の場所で指定されたファイルを見つけたり開いたり(?)できません。これは正しいですか?もしそうなら、何がそれを引き起こす可能性がありますか?
fid
(ファイル識別子)はfopen
の出力です。これは整数ですが、ファイルと永続的には関係ありません。 fopen
を取得するには、fid
を使用する必要があります。 fid
、fread
、fscanf
などのファイル関連のI/Oコマンドで誤ったfclose
(ファイル識別子)を使用しているようです。失敗したfopen
は、-1
のfid
を与えます。有効な通常のファイルが成功すると、fopen
は、3
以上の整数であるfid
を返します。
ただし、コードがないと、バグやエラーがどこにあるのか、何であるのかを判断することはできません。 MATLABデバッガーを使用して、関連するfopen
(ブレークポイントを設定してプログラムを実行)から関連するfclose
までコードをシングルステップし、fid
(またはファイル識別子に使用する変数名)またはファイル識別子のデータ構造を確認できます。 (コードに複数のファイル識別子がある場合)関連するfopen
とfclose
の間の任意のポイントでの変更。
permissionoptionをに追加することで、この問題を自分で解決しました)fopen。 http://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');
私はこの問題を抱えていました。私が書き込もうとしたファイルが大きすぎることが判明しました(それを収容するのに十分な空き容量がありませんでした)。ただし、プログラムはfcloseの呼び出しまで失敗しませんでした。とても紛らわしい!
この診断をテストするには、スペースを解放するか、非常に小さなファイルを書き込んでみてください。
ASFツールボックスのデモを開こうとしたときに同じ問題が発生しました。管理者としてMatlabを実行すると(右クリックして開く)、この問題は解決したようです。
fopen
は、MATLABに指定したファイルの読み取り/書き込み権限がないため、失敗する可能性があります。
あなた/ MATLABがすべての権限を持っている場所でファイルを開いてみてください(OSによって異なります)。
許可を得てfopen
を使用しましたが、同じエラーが発生しました。しかし、私はMATLABをadminとして起動しましたそしてそれで問題は解決しました。
ファイルをExcelで開いた結果、fopenは-1を返しました。そのような些細な問題を見つけるために私を永遠に連れて行った。
最初にスラッシュが付いているパスでも、同じエラーが発生する可能性があります。
filename = '/data/myfile.txt';
このエラーをスローしますが
filename = 'data/myfile.txt';
エラーは発生しません。
また、存在しないディレクトリにファイルを作成しようとしたときにも発生します。 MATLAB内でmkdir('folderName')
を試すか、事前にディレクトリを作成してください。