什么原因导致MATLAB中的文件标识符无效?

nik*_*dia 5 matlab fopen

我有一个MATLAB脚本,我可以在上次使用它(一年前)时发誓工作正常.现在,我收到此错误:

Invalid file identifier.  Use fopen to generate a valid file identifier.
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,则无法找到或打开(?)脚本中其他位置指定的文件.这是正确的吗?如果是这样,会导致什么?

nrz*_*nrz 10

fid(文件标识符)是输出fopen.它是一个整数,但与文件永久无关.你需要用来fopen获得fid.在我看来,您fid在某些与文件相关的I/O命令中使用了不正确的(文件标识符),例如fread,fscanffclose.不成功fopen给出fid-1.对于任何有效的普通文件,成功fopen将给出fid3更大或更大的整数.

但是,没有任何代码,就无法说出错误或错误的位置或内容.您可以使用MATLAB调试器从相关的单步执行代码fopen(在那里设置断点并运行您的程序),直到相关fclose并查看if fid(或用于文件标识符的任何变量名称)或文件标识符的任何数据结构(如果有)代码中的多个文件标识符)在相关fopenfclose.之间的任何点上发生变化.


小智 8

我通过向fopen添加权限选项为我自己解决了这个问题.正如您在http://www.mathworks.se/help/matlab/ref/fopen.html中看到的,fopen语法是:

fileID = fopen(filename,permission)
Run Code Online (Sandbox Code Playgroud)

可能的权限,例如:'r'(默认值)| 'w'| 'a'| 'r +'| 'w +'| 'a +'| ...

'r' - 打开文件进行阅读.

'w' - 打开或创建新文件进行写作.丢弃现有内容(如果有).

'a' - 打开或创建用于写作的新文件.将数据附加到文件末尾.

'r +' - 打开文件进行读写.

'w +' - 打开或创建新文件进行读写.丢弃现有内容(如果有).

'a +' - 打开或创建新文件进行读写.将数据附加到文件末尾.

...

如果我使用fopen without permission选项,或者如果我使用'r'(默认)选项,fopen将返回-1,这是错误.我成功了:

fid=fopen('tmp.txt', 'w');
fid=fopen('tmp.txt', 'a');
Run Code Online (Sandbox Code Playgroud)


小智 6

我有这个问题.事实证明,我试图写的文件太大(我没有足够的可用空间来容纳它).但是,在调用fclose之前,程序没有失败.很混乱!

尝试释放一些空间,或者写一个非常小的文件来测试这个诊断.


小智 6

我在尝试打开ASF工具箱演示时遇到了同样的问题.以管理员身份运行Matlab(右键单击打开)似乎为我解决了这个问题.