我如何通过编程(c#)验证国际文化(如中国)的驱动器号

本文关键字:中国 文化 驱动器 验证 何通过 编程 | 更新日期: 2023-09-27 18:06:10

背景:

我试图验证一条可能并不存在的路径。因此,我无法使用"Directory.Exists(("方法对其进行验证。此外,该代码可能在不同的机器上运行。我只想知道什么是有效的,什么是无效的。我研究发现,这比我最初想象的要复杂得多。如果微软给出一个方法的话,事情会简单得多。

我很快意识到Path.GetInvalidPathChars((和Path.GetInvalidFileNameChars(。如果使用GetInvalidPathChars((进行验证,则它允许使用诸如"*"answers"?"之类的字母,而这些字母实际上并不是有效的目录名或文件名。GetInvalidFileNameChars((是一个更好的选项。但是,它不允许使用冒号(":"(,只有当冒号紧跟在驱动器号之后时,冒号才是有效字符。此外,几乎没有其他规则规定文件夹名称不能将所有字符都作为点("."(。同样,目录不能包含一些保留字,如LPT1到LPT9或COM1到COM9。完整的规则列表记录在这里:https://msdn.microsoft.com/en-us/library/aa365247.aspx?f=255&MSPP错误=-2147217396

因此,为了验证路径,我将路径分为两部分——

  • 根部分使用Path.GetPathRoot((方法,并单独验证
  • 剩下的路径-这是使用path.DirectorySeparatorChar进一步拆分的,然后我使用复杂的算法单独验证每个目录名。(一旦完成,我将稍后发布该代码(

主要问题

我想通过检查驱动器号是否有效来验证根路径。我知道你对英国文化只能有从A到Z的动力。但我如何才能在中国或日本等国际文化中验证这一点呢?我找不到任何关于德国或中国机器的有效驱动器号列表的文档。这些系统允许其他Unicode字符作为驱动器号吗?

我如何通过编程(c#)验证国际文化(如中国)的驱动器号

很简单:无论区域性如何,A-Z都是唯一有效的驱动器号。但你当然可以有一条没有驱动器号的路径。

一般来说,在处理路径名时,您不需要担心区域性。文件夹使用Unicode,并且无论区域设置如何,所有用户都可以访问该文件夹。

但还有许多其他非常大的问题需要解决。

我想说:这是不可能的。一个完整的解释为什么是太多的堆栈溢出的答案。但是考虑一下:我可能有一个映射到驱动器号的网络共享。这可能是与Samba共享的Linux或Mac文件夹。因此,您最终必须考虑到这些操作系统的所有限制、该机器上的确切文件系统以及共享协议的限制。或者想象一台共享FAT32文件系统的Windows机器。甚至是FAT16,它不支持Unicode,也不支持长文件名。

还有许多其他问题,即使对于本地驱动器也是如此。但是,正如我所说,这个答案太多了。