"File exists, but cannot be read",但第三次尝试很有魅力(使用 emacs,os-x Catalina 10.15.6,dropbox 智能同步)

"File exists, but cannot be read", but third try is a charm (with emacs, os-x Catalina 10.15.6, dropbox smart sync)

我尝试使用 emacs c-x c-f /Users/fred/Dropbox/foo/bar/bam/baz.txt.

打开一个文件

在迷你缓冲区中它说...

“文件存在,但无法读取”。

...接下来我执行 m-x 还原缓冲区。现在在迷你缓冲区中它说....

“打开输入文件:Input/output 错误,/Users/fred/Dropbox/foo/bar/bam/baz.txt”

...我再次执行 m-x 还原缓冲区,这次文件读取正常。

问题是文件应该在第一次尝试时打开,没有问题!

这或多或少是一个可重复的问题(具体来说,我在过去 2 周内多次收到“文件存在,但无法读取”。我尝试了各种变通方法来打开文件(例如,点击 m-x 还原缓冲区如上所述的两倍。我通常(总是?)能够打开文件。一旦我终于打开了其中一个顽固的文件,它很容易在其他上下文中使用 emacs 打开(例如 new windows,或在我关闭缓冲区后重新打开)。

<<< 在原始 POST ~2 天后更新 -- 本节开始 >>

当我使用启动 emacs 的初始化文件启动 emacs 时,我似乎能够重现非常相似的行为打开大约 30 个不同的文本文件。 (即 init 的一部分是在 emacs 中打开这些文件)。当我将 emacs 缓冲区 (c-x b) 更改为指向某些文件时,将它们命名为 GoodFile1、GoodFile2,其中的文本是可见的,即一切正常。对于其他文件,将它们命名为 BadFile1、BadFile2、BadFile3,当我切换到它们时,屏幕是空白的,我知道它们里面有很多文本。我似乎没有任何类似于“文件存在,但无法读取”的错误消息,但这仍然是不良行为,并且似乎与原始问题有关。接下来,与最初报告的案例类似,我按了 1 到 4(?)次 m-x 恢复缓冲区,噗!,文本出现了,我再次感到非常高兴。现在,这是有趣的一点:当我启动一个 new 终端 window 并启动一个 emacs 加载相同的初始化文件,然后是以前的坏文件(例如 BadFile1、BadFile2、BadFile3)现在从一开始就可见——因为它们应该在正常运行的计算机上。就好像一个以前看似空白的文件改变了某种状态,以便当一个新的 emacs 试图打开它时,文件会按预期显示。涉及什么样的状态变化?我认为这与智能同步有关。所以问题是,假设它是智能同步,如何避免这种烦人的要求多次点击恢复缓冲区的行为?它在靴子之间持续吗?我很确定 unix touch 没有帮助。也许还有其他操作要执行?

注意:在这个 machine 上,我总是以 'emacs -nw -l my_special_emacs_init.el' 开始 emacs(GUI 是为懦夫准备的 (-;)

<<< 在原始 POST ~2 天后更新 -- 本节结束 >>

所有烦人的不良行为都发生在我的 new 设置上。

在我的旧设置中,我 从未 多年来(可能是几十年)遇到过任何类似这种行为的事情。 (而且,在我的旧设置中,我尝试了上面提到的特定文件,它打开得很好)

那么,您可能会问,我的新设置和旧设置有什么不同?

  1. OS / 硬件:

    • 新设置:全新 Mac Book Pro 上的 Catalina 10.15.6。
    • 旧设置:Mac Book Pro“2015 年初”上的 Mohave 10.14.6(之前的 OS 也从未出现过此问题)
  2. 投递箱:

    • 新设置:智能同步开启。我在启用智能同步的情况下使用 Dropbox,这样文件默认为“仅在线”。 “仅限在线”用词不当。有些文件最终保存在我的本地硬盘上。智能同步似乎可以确定在 mac 上本地存储哪些文件。我怀疑知道它是如何做到这一点会解决我的问题。

    • 旧设置:智能同步关闭。我使用 Dropbox 多年,但一直远离 Smart Sync,打开文件时从未遇到过问题。

  3. Emacs 版本:

    • 新设置:GNU Emacs 27.1
    • 旧设置:GNU Emacs 22.1.1.

显然这不可能是权限问题,因为我的旧设置从未遇到过这个问题。

有什么线索吗?

当我发现另一个“文件存在,但无法读取”的情况时,有谁知道我可以“深入挖掘”的任何诊断。

想知道它是否 OS 不同吗?硬件差异? Dropbox Smart Sync Yes 与 Smart Sync 没有区别? Emacs版本差异?

<<< 在原始 POST ~2 天后更新 -- 本节开始 >> 我目前的预感是上面更新中提到的 'state change' 与智能同步有关,以某种方式确定用户想要在本地缓存给定文件。不良行为文件是非本地的,所以可怜的 emacs 无法打开它们。用 1 到 4 个还原缓冲区重击它们告诉智能同步将给定文件设为本地。 las,smart sync 还不够聪明,无法立即弄清楚 emacs 用户想要什么!也许可以更改 emacs,使智能同步意识到给定的文件应该是本地文件或者我们可以请求 Dropbox 尊重 emacs。或者我没有正确使用智能同步。想法? <<< 在原始 POST ~2 天后更新 -- 本节结束 >>

我遇到了同样的问题。这是根本原因,解决方案:

https://emacs.stackexchange.com/questions/53026/how-to-restore-file-system-access-in-macos-catalina

简而言之,在常规设置 -> 安全和隐私 -> 隐私中授予 /usr/bin/ruby 完全文件系统访问权限

我在大苏尔遇到了这个问题;给予 /usr/bin/ruby 完全磁盘访问权限解决了问题。

请注意,这并非易事,您必须在系统首选项文件选择器中按 cmd-shift-dot 才能使 usr 目录在 Macintosh HD 级别可见。