【问题标题】:Detect if two paths are the same [duplicate]检测两条路径是否相同[重复]
【发布时间】:2015-06-28 07:32:14
【问题描述】:

我有两条路:

\\10.11.11.130\FileServer\Folder2\Folder3\
\\10.11.11.130\d$\Main\FileServer\Folder2\Folder3\

我想检测两条路径是否相同。

我想要它,因为我正试图将一个文件移动到另一个目录。 所以对于上面的路径,都会抛出异常。

我知道我可以使用 try 和 catch,但还有其他方法吗?

我想过从第二条路径中删除d$\Main,然后进行比较,但这并不总是正确的..

任何帮助表示赞赏!

【问题讨论】:

  • 这会检查文件是否存在于文件夹中,而不是检查源路径和目标路径是否相同
  • @Serv True,但是您可以模拟检查路径是否相同的行为,您可以创建一个具有唯一名称的文件并检查它是否存在于其他目录中。然后您可以删除创建的文件,因为不再需要它。这不是最好的解决方案,但它可能就足够了。
  • 总结:这不是直截了当的。文件夹没有唯一的 id / guid,它们只有一个路径。当您通过两个不同的共享接近相同的路径时,没有办法知道。您可以直接创建到 Folder3 的共享,例如 '\\host\Folder3\' - 所以您不能只删除前缀。共享的要点是它们没有指定驱动器驱动器,并且可以在不更改客户端的情况下移动 - 例如,D: 已满,因此 Folder3 移动到 E: - 仍然共享为 '\\host\folder3' 但现在在 E:\Somefolder\Folder3.
  • 为每个路径创建 DirectoryInfo 实例,然后尝试比较 FullName 不确定但试一试。

标签: c#


【解决方案1】:

你可以有这样的方法来检查是否相等:

public static bool PathsSame(string pth1, string pth2)
{
    string fName = System.IO.Path.GetRandomFileName();
    string fPath = System.IO.Path.Combine(pth1, fName);
    System.IO.File.Create(fPath);
    string nPath = System.IO.Path.Combine(pth2, fName);
    bool same = File.Exists(nPath);
    System.IO.File.Delete(fPath);
    return same;
}

这模拟了检查路径是否相同的行为,您可以创建一个具有唯一名称的文件并检查它是否存在于其他目录中。然后您可以删除创建的文件,因为不再需要它。这不是最好的解决方案,但它可能就足够了。

这也不处理可能发生的错误。有关错误处理,请查看:https://msdn.microsoft.com/en-us/library/vstudio/as2f1fez(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2016-04-11
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多