【问题标题】:What causes an invalid file identifier in MATLAB?什么导致 MATLAB 中的文件标识符无效?
【发布时间】:2012-05-15 18:04:59
【问题描述】:

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

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

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

【问题讨论】:

  • 该错误应始终与特定的源代码行相关联。用它来识别问题。
  • 您的文件是否可能不在您当前的工作目录或您的 matlab 路径中?
  • 我回到了错误指向的那一行,但我没有发现任何问题。
  • 它们似乎都在正确的目录中。
  • @nikipedia:问题在于,失败的任何行都使用了无效的文件 ID。要么您没有向其传递使用 fopen 创建的文件 ID,要么 fopen 失败。

标签: matlab fopen


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我通过将权限选项添加到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');
    

    【讨论】:

    • 我正在使用权限'rt',fid = fopen(offfullname,'rt'),但仍然得到fid=-1,和作者一样的错误“无效的文件标识符”得到。一周前它确实可以正常工作!
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 不适用于 Ubuntu。使用 sudo 运行但仍然有问题。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

              filename = '/data/myfile.txt';
              

              抛出此错误,而

              filename = 'data/myfile.txt';
              

              不会产生错误。

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                【解决方案11】:

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

                【讨论】:

                • 没有。错误的。对不起。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-08-27
                • 2013-04-05
                • 1970-01-01
                • 1970-01-01
                • 2014-08-15
                相关资源
                最近更新 更多