6

我有一个 MATLAB 脚本,我可以发誓上次使用它时(一年前)运行良好。现在,我收到此错误:

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

如果我理解正确,它将无法找到或打开(?)脚本中其他地方指定的文件。这是正确的吗?如果是这样,可能是什么原因造成的?

4

11 回答 11

11

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

However, without any code it's impossible to say where or what the bug or error is. You could use MATLAB debugger to single-step the code from relevant fopen (set breakpoint there and run your program) until the relevant fclose and see if fid (or whatever variable name you use for file identifier) or any data structure for your file identifiers (if have more than one file identifier in your code) changes in any point between relevant fopen and fclose.

于 2012-05-15T18:20:04.093 回答
9

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

fileID = fopen(filename,permission)

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

'r' - 打开文件进行读取。

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

'a' - 打开或创建新文件以进行写入。将数据附加到文件末尾。

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

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

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

...

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

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

我有这个问题。原来我试图写入的文件太大(我没有足够的可用空间来容纳它)。但是,直到调用 fclose,程序才失败。非常混乱!

尝试释放一些空间或编写一个非常小的文件来测试此诊断。

于 2012-10-19T08:21:49.073 回答
6

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

于 2013-12-31T12:58:35.813 回答
3

fopen可能会失败,因为 MATLAB 没有读取/写入您指定的文件的权限。

尝试在您/MATLAB 拥有所有权限的位置(取决于您的操作系统)打开文件。

于 2013-06-13T16:01:15.537 回答
2

我已经fopen获得许可使用并且出现了同样的错误。但是,我以管理员身份启动了 MATLAB,这解决了这个问题。

于 2016-10-12T00:00:34.117 回答
1

我在 excel 中打开了文件,结果 fopen 返回了 -1。花了我很长时间才找到这么一个微不足道的问题。

于 2013-11-26T20:31:36.727 回答
1

尝试在不存在的目录中创建文件时也会发生这种情况。mkdir('folderName')在 MATLAB 中尝试或只是预先创建目录。

于 2016-09-13T12:12:28.767 回答
0

对于我的情况,我已经检查了所有内容,但错过了一个简单的步骤。

在运行“fopen”代码之前,请选择“浏览您的文件夹”并浏览您当前的文档位置。

在此处输入图像描述

于 2018-11-28T13:31:07.940 回答
0

开头带有正斜杠的路径可能会导致相同的错误。

filename = '/data/myfile.txt';

抛出此错误,而

filename = 'data/myfile.txt';

不会产生错误。

于 2016-07-17T12:48:03.050 回答
-3

当脚本试图读取文件末尾之外的内容时也会发生这种情况。

于 2015-04-16T14:52:24.433 回答