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

时间:2012-05-15 18:04:59

标签: matlab fopen

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

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

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

11 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:8)

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

fileID = fopen(filename,permission)

可能的权限,例如:  ' R' (默认)| ' W' | '一个' | ' R +' | ' W +' | ' A +' | ...

' R' - 打开文件进行阅读。

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

'一个' - 打开或创建用于写入的新文件。将数据附加到文件末尾。

' R +' - 打开文件进行阅读和写作。

' W +' - 打开或创建用于读写的新文件。丢弃现有内容(如果有)。

' A +' - 打开或创建用于读写的新文件。将数据附加到文件末尾。

...

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

fid=fopen('tmp.txt', 'w');
fid=fopen('tmp.txt', 'a');

答案 2 :(得分:6)

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

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

答案 3 :(得分:6)

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

答案 4 :(得分:3)

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

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

答案 5 :(得分:1)

我已经使用了fopen权限并且出现了同样的错误。但是,我启动MATLAB作为管理员,并解决了这个问题。

答案 6 :(得分:0)

我在excel中打开了文件,因此fopen返回-1。 让我永远找到这样一个微不足道的问题。

答案 7 :(得分:0)

在开头使用正斜杠的路径可能会导致相同的错误。

filename = '/data/myfile.txt';

抛出此错误,而

filename = 'data/myfile.txt';

不会产生错误。

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

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

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

enter image description here

答案 10 :(得分:-3)

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