如何使用Delphi检查路径是否指向根文件夹

如何使用Delphi检查路径是否指向根文件夹,delphi,Delphi,检查特定路径是否指向驱动器根目录的最佳/最简单方法是什么 我想我可以检查路径名是否以“\”或“:”结尾,或者路径长度是否只有2或3个字符,但我希望有某种标准的“IsDriveRoot”函数来检查这一点 德克萨斯州 更新: 搜索Delphi帮助文件后,我找到了ExtractFileDrive()函数,该函数返回任何给定路径的驱动器部分 使用该函数可以很容易地编写一个小函数来检查原始路径是否与ExtractFileDrive()的结果相同,这意味着原始路径必须是驱动器的根 Function IsDr

检查特定路径是否指向驱动器根目录的最佳/最简单方法是什么

我想我可以检查路径名是否以“\”或“:”结尾,或者路径长度是否只有2或3个字符,但我希望有某种标准的“IsDriveRoot”函数来检查这一点

德克萨斯州

更新:

搜索Delphi帮助文件后,我找到了ExtractFileDrive()函数,该函数返回任何给定路径的驱动器部分

使用该函数可以很容易地编写一个小函数来检查原始路径是否与ExtractFileDrive()的结果相同,这意味着原始路径必须是驱动器的根

Function IsDriveRoot(APath: string): Boolean;
begin
  Result := ((Length(APath) = 2) and (ExtractFileDrive(APath) = APath))
         or ((Length(APath) = 3) and ((ExtractFileDrive(APath) + '\') = APath));
end;

像这样的东西应该可以

事实上,我认为第二个例子更简单,可能最终会使用这个例子


再次感谢所有响应者:)

您可以利用GetDriveType()调用:

如果GetDriveType(PChar(path))驱动器号根目录,则
...

这似乎对您的情况很有帮助。

如果您在该服务器上共享了C:\drive root作为共享,则\\SERVER\SHARE的补丁是否合格?您可能还需要考虑到,可移动存储设备可能没有分配字母,只是一个连接点。因此,类似于
D:\USBDrive
的内容实际上可能指向它的根目录。不要用你找到的解决方案更新问题,你应该把它放在你自己的答案中。这样,如果人们认为这是一个好的解决方案,他们可以投票表决,而你最终可以接受它作为“最佳”答案。当问题和答案清楚地分开时,这个网站工作得最好。我想你的意思是,链接页面上的评论似乎暗示该方法可能不适用于OP。GetDriveType没有DRIVE\u not\u ROOT\u DIR返回-它实际上是DRIVE\u no\u ROOT\u DIR,这意味着根路径无效(路径上没有卷映射)。谢谢。GetDriveType便于检查驱动器是否存在,如果存在,则检查驱动器的类型。但是,它不会告诉您相对于现有驱动器的特定路径是否指向驱动器的根。据我所知,这更多是用于检查特定路径来自哪个卷。它仍然不能告诉您给定的路径是否是卷的根。谢谢你:)@deonvn:你说得对。但您可以将传递到此函数的路径与其结果进行比较。如果他们相等,那么。。。你猜怎么着?:)对不起,你说得对。我没有注意到,如果您指定一个没有卷的路径,那么函数只返回驱动器号——所以是的,这会起作用。使用ExtractFileDrive()找到了类似的解决方案。我已经更新了我原来的帖子。再次发送。@deonvn:是的,这是一个很好的解决方案。您仍然无法解决
\\SERVER\SHARE
和使用
ExtractFileDrive()
的连接点的情况,以及我的解决方案也无法解决的情况,即
C:\Windows\..
等。如果您想处理
C:\Windows\..
您可以使用
Function IsDriveRoot(APath: string): Boolean;
begin
  Result := ((Length(APath) = 2) and (Copy(APath,2,1) = ':'))
         or ((Length(APath) = 3) and (Copy(APath,3,1) = '\'));
end;
if GetDriveType(PChar(path)) <> DRIVE_NO_ROOT_DIR then
...