我有一个MATLAB脚本,我可以在上次使用它(一年前)时发誓工作正常。现在,我收到了这个错误:
Invalid file identifier. Use fopen to generate a valid file identifier.
如果我理解正确,则无法找到或打开(?)脚本中其他位置指定的文件。这是正确的吗?如果是这样,会导致什么呢?
答案 0 :(得分:10)
fid
(文件标识符)是fopen
的输出。它是一个整数,但永久不与文件相关。您需要使用fopen
来获取fid
。在我看来,您在某些与文件相关的I / O命令中使用了不正确的fid
(文件标识符),例如fread
,fscanf
或fclose
。不成功的fopen
会fid
-1
。对于任何有效的普通文件,成功fopen
将fid
为3
或更大的整数。
但是,如果没有任何代码,就无法说出错误或错误的位置或内容。您可以使用MATLAB调试器从相关fopen
单步执行代码(在那里设置断点并运行程序)直到相关的fclose
并查看fid
(或者您使用的任何变量名称)对于文件标识符)或文件标识符的任何数据结构(如果代码中有多个文件标识符)在相关fopen
和fclose
之间的任何点都会发生变化。
答案 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)
答案 10 :(得分:-3)
当脚本尝试读取文件末尾之外时也会发生这种情况。