我认为我发现了文件系统中的一个错误,而 Windows 似乎没有报告错误的地方,所以我会在这里发布它,以防有人能启发我。首先你应该注意,Windows 文件资源管理器不允许文件以.
(点)结尾。
- 创建一个随机文件,比如
a.txt
- 使用 cmd 实用程序 ren 重命名文件,你可以这样做
ren "a.txt" "a.txt../"
现在你有一个无法访问的文件a.txt..
我还使用 MoveFile API 函数以编程方式重现了它https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefile。
答案1
这不是一个错误(尽管似乎有很多文章怀疑这是否是一个错误)。
请查看当前的 Microsoft 文档:
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
本文内容来自 2020 年(因此相当新)
文章中的相关引述。
不要以空格或句点结尾文件或目录名称。虽然底层文件系统可能支持此类名称,但 Windows shell 和用户界面不支持。不过,将句点指定为名称的第一个字符是可以接受的。例如,“.temp”
以两个点(..)结尾的文件仅仅是文件名里面的一个点(允许的),然后以一个点(.)结尾,这是不允许的。
我本人当然会遵守这些规范以避免出现问题。
如果您使用不允许的方法/字符创建文件,通常可以使用 Unlocker 1.92 (Metageek) 删除这些文件。当我有不需要的顽固文件时,我会使用 Unlocker。
答案2
如果这不是一个错误,我该如何删除这个文件?DeleteFile API 不起作用,del 不起作用
无法在 Windows GUI 中访问,但可以在创建文件时使用的同一界面中删除文件,请使用提示符/命令行:
- 这
del name.ext../
命令不起作用,尝试使用文件删除*.* /P
:
>ren "a.txt" "Bug.txt../"
>del *.* /p
F:\2020-SU\Q1594381\bug.txt.., Delete (Y/N)? Y
对于删除此文件,此选项也有效:
del bug.txt..?
del bug.txt^.^.?
del "\\?\%cd%\bug.txt..?"
del \\?\%cd%\bug.txt^.^.?
您可以撤消此操作:
ren \\?\%cd%\bug.txt^.^.? a.txt
列出文件内容..
type \\?\%cd%\bug.txt^.^.?
F:\2020-SU\Q1594189>del /?
Deletes one or more files.
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
names Specifies a list of one or more files or directories.
Wildcards may be used to delete multiple files. If a
directory is specified, all files within the directory
will be deleted.
/P Prompts for confirmation before deleting each file.
/F Force deleting of read-only files.
/S Delete specified files from all subdirectories.
/Q Quiet mode, do not ask if ok to delete on global wildcard
/A Selects files to delete based on attributes
attributes R Read-only files S System files
H Hidden files A Files ready for archiving
I Not content indexed Files L Reparse Points
O Offline files - Prefix meaning not
If Command Extensions are enabled DEL and ERASE change as follows:
The display semantics of the /S switch are reversed in that it shows
you only the files that are deleted, not the ones it could not find.