![非隐藏目录不会显示在资源管理器中,但创建该目录的程序可以访问它](https://linux22.com/image/1488689/%E9%9D%9E%E9%9A%90%E8%97%8F%E7%9B%AE%E5%BD%95%E4%B8%8D%E4%BC%9A%E6%98%BE%E7%A4%BA%E5%9C%A8%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E5%99%A8%E4%B8%AD%EF%BC%8C%E4%BD%86%E5%88%9B%E5%BB%BA%E8%AF%A5%E7%9B%AE%E5%BD%95%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%8F%AF%E4%BB%A5%E8%AE%BF%E9%97%AE%E5%AE%83.png)
我在用着IMAP尺寸备份我的邮箱。该过程只是将邮箱内容转储到.eml
磁盘上的文件中。无论如何,我备份的第一个邮箱如我所料地显示出来。但是,下一个邮箱没有显示在 Explorer 中,如果我在地址栏中输入它,它会告诉我它不存在。
然而,IMAPSize 坚持认为文件在那里。(操作期间执行了大量磁盘写入操作。)此外,目录做出现在 Windows 目录对话框中,并且 - 因为我安装了 GNU 工具 - 它显示在ls
(但不在本机中dir
)。我无法cd
进入目录,但ls
似乎能够访问它(而且,事实上,我期望的目录和文件似乎在那里)。
还请注意,和输出中的时间戳和文件大小backup.db
是不同的。dir
ls -l
简而言之:这里发生了什么事?我该如何解决它?
答案1
让我猜测一下:创建该文件的程序以及 GNU 实用程序未以管理员身份运行。
首先,让我们回顾一下历史。在 Windows XP 时代,许多程序都假设它们将始终以管理员身份运行,并会肆无忌惮地写入C:\Windows
和等位置C:\Program Files (x86)
。在 Vista 中,微软试图让更少的人成为管理员,但标准用户无法写入这些位置。他们需要这些可疑的程序继续工作(否则人们不会升级)。因此,他们引入了一项神奇的功能,称为UAC 虚拟化。
以标准用户身份运行的程序可能认为它们对重要位置的写入成功了,但实际上,Windows 将数据隐藏在每个用户位置。当这些程序在目录中查找文件时,Windows 会检查该位置的虚拟存储中是否有任何文件,如果有,它会将它们添加到目录列表中。(注册表有等效功能。)
看起来您的邮件程序Program Files (x86)
在以普通用户身份运行时尝试写入下面的某个位置。写入被重定向,因此它实际上没有到达那个位置。程序仍然可以看到它,因为 Windows 为它保留了幻觉。Explorer 看不到它,因为它向操作系统宣布它表现良好,因此不需要重定向。命令提示符的命令dir
不是程序(它只是 的一个功能cmd.exe
),因此它也被视为“知情”,因此不会显示兼容性文件。ls
是一个显然不知情的程序,因此它可以看到兼容性文件。
您可以在这里找到您的文件:
%LOCALAPPDATA%\VirtualStore\Program Files (x86)\IMAPSize\backup
在仔细研究时VirtualStore
,您可能会惊讶地发现哪些程序行为不当且需要虚拟化安全网。
如果您想停止重定向,请以管理员身份运行该程序,或将您的备份保存在您无需管理员权限即可写入的位置。