手动加上\是正常的,但是通过cmd命令获得的盘符列表默认就是不带\的。
如果是希望实现如下操作:获取电脑中的所有盘符(通过cmd)→获取盘符中的文件列表(通过【文件和目录操作】)→移动文件至文件夹(通过【文件和目录操作】)
对于没中招过此BUG的开发者而言,几乎是必然中招的。
也许可以在【文件和目录操作】(获取文件/文件夹)对于输入路径加上一个预处理步骤,检查一下输入路径末尾是否有\,如果没有,就在末尾添加\。(理论上无论是否是根目录,输入路径末尾有没有\,对输出路径都不会产生负面影响)
但是这里还有一些其他问题:
1.如果是获取的网络路径,直接添加\是否也会导致错误
(个人怀疑这是否就是因为输入路径本身没有带\或/,导致输出路径也不知道带啥了,所以就没有分隔符输出)
我个人已在自己的动作中自行补足末尾的\了,但是还是建议C大可能麻烦一下,在模块内部处理一下此情况会更好些。
因为如果【文件和目录操作】(获取文件/文件夹)的输入路径,为动作的 用户自行输入的任意路径 时,大部分普通路径都能正常工作,而一旦用户直接输入根目录盘符且没有带\,则可能导致错误。
大部分其他动作的开发者应该都是没有手动写逻辑来排除此情况的,并且此情况出现时也不会被模块进行报错并抛出,在用户和开发者都未察觉的情况下,有可能会基于此路径错误的问题导致一些严重的错误。而【文件和目录操作】(获取文件/文件夹)此模块又是一个比较高频使用且基础的模块,所以此问题可能直接在模块内补上,或者报错抛出会更好些?
如果您认为此问题还是动作开发者自行解决更好,那么我这边可能得排查一下我所有涉及此模块的部分了(悲
经过测试,验证了AI的说法,在没有斜杠的时候,获得的不一定是根目录里的文件列表,而是这个分区“当前目录”的文件列表。看起来自动补个斜杠应该是合适的。
--------
在 C# 里,Directory.GetFiles("c:")
和 Directory.GetFiles("c:\\")
的行为确实不一样,这跟 Windows 对路径的解释 有关,而不是 C# 本身的特性。区别主要在于:
c:\
是绝对路径c:\
明确表示 C 盘根目录。
所以 Directory.GetFiles("c:\\")
会列出 C 盘根目录下的所有文件。
c:
是当前工作目录的盘符路径仅写 c:
时,Windows 会解释成 C 盘上当前的工作目录,而不是根目录。
每个驱动器都有自己“记住的”当前工作目录。比如:
C:\Users> cd C:\Windows
C:\Users> C:
C:\Windows> ← 这里就是 C: 的当前目录
所以 Directory.GetFiles("c:")
实际上等价于:
Directory.GetFiles(Path.Combine(Environment.CurrentDirectoryOnC, "."));
这会依赖 C 盘上上次访问时的“当前目录”。如果程序启动时没显式切换,可能默认是 C:\Windows\System32
或者其他位置。
Directory.GetFiles("c:\\")
→ 始终列出 C 盘根目录。
Directory.GetFiles("c:")
→ 列出 C 盘当前目录,可能是某个子目录,而不是根目录。
如果你想始终获取根目录下的文件,应该始终使用 带反斜杠的绝对路径:
var files = Directory.GetFiles(@"C:\");
如果你想获取某个特定子目录:
var files = Directory.GetFiles(@"C:\Windows");