Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 使用c语言比较两条路径获得重复路径#_File_C# 4.0 - Fatal编程技术网

File 使用c语言比较两条路径获得重复路径#

File 使用c语言比较两条路径获得重复路径#,file,c#-4.0,File,C# 4.0,我有两个文件路径 例如: 路径1C:\Users\Me\FileFolder\File1.info 路径2C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info 我想创建一个方法来提取重复路径: 结果C:\Users\Me\FileFolder 有没有办法做到这一点?或者如何实现?可以使用String.Split方法和Enumerable.TakeWhile var part1 = path1.Split(Path.Directory

我有两个文件路径

例如:

路径1
C:\Users\Me\FileFolder\File1.info

路径2
C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info

我想创建一个方法来提取重复路径:

结果
C:\Users\Me\FileFolder


有没有办法做到这一点?或者如何实现?

可以使用
String.Split
方法和
Enumerable.TakeWhile

var part1 = path1.Split(Path.DirectorySeparatorChar);
var part2 = path2.Split(Path.DirectorySeparatorChar);

var commonParts = part1.TakeWhile((x,idx) => idx < part2.Length && part2[idx] == x);

if (commonParts.Any())
{
     var result = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
}
var part1=path1.Split(Path.directoryseportorchar);
var part2=path2.Split(Path.directoryseportorchar);
var commonParts=part1.TakeWhile((x,idx)=>idx

可以使用
String.Split
方法和
Enumerable.TakeWhile

var part1 = path1.Split(Path.DirectorySeparatorChar);
var part2 = path2.Split(Path.DirectorySeparatorChar);

var commonParts = part1.TakeWhile((x,idx) => idx < part2.Length && part2[idx] == x);

if (commonParts.Any())
{
     var result = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
}
var part1=path1.Split(Path.directoryseportorchar);
var part2=path2.Split(Path.directoryseportorchar);
var commonParts=part1.TakeWhile((x,idx)=>idx

可以使用
String.Split
方法和
Enumerable.TakeWhile

var part1 = path1.Split(Path.DirectorySeparatorChar);
var part2 = path2.Split(Path.DirectorySeparatorChar);

var commonParts = part1.TakeWhile((x,idx) => idx < part2.Length && part2[idx] == x);

if (commonParts.Any())
{
     var result = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
}
var part1=path1.Split(Path.directoryseportorchar);
var part2=path2.Split(Path.directoryseportorchar);
var commonParts=part1.TakeWhile((x,idx)=>idx

可以使用
String.Split
方法和
Enumerable.TakeWhile

var part1 = path1.Split(Path.DirectorySeparatorChar);
var part2 = path2.Split(Path.DirectorySeparatorChar);

var commonParts = part1.TakeWhile((x,idx) => idx < part2.Length && part2[idx] == x);

if (commonParts.Any())
{
     var result = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
}
var part1=path1.Split(Path.directoryseportorchar);
var part2=path2.Split(Path.directoryseportorchar);
var commonParts=part1.TakeWhile((x,idx)=>idx

我假设您要查找所有公用文件夹,因此,如果要查找从这两个文件夹共享的路径,请尝试以下操作:

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";

string root1 = Path.GetPathRoot(path1);
string root2 = Path.GetPathRoot(path2);

if (root1.Equals(root2, StringComparison.InvariantCultureIgnoreCase))
{
    string[] folders1 = path1.Split(Path.DirectorySeparatorChar);
    string[] folders2 = path2.Split(Path.DirectorySeparatorChar);
    var commonFolders = folders1.TakeWhile((dir, index) => 
        folders2.Length > index &&
        dir.Equals(folders2[index], StringComparison.InvariantCultureIgnoreCase));
    string commonFolderPath = string.Format("{0}{1}"
        , root1
        , Path.Combine(commonFolders.Skip(1).ToArray())); // Skip(1) skips root
    Console.Write(commonFolderPath);
}

结果:
C:\Users\Me\FileFolder

我假设您要查找所有公用文件夹,因此从这两个文件夹共享的路径,请尝试以下操作:

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";

string root1 = Path.GetPathRoot(path1);
string root2 = Path.GetPathRoot(path2);

if (root1.Equals(root2, StringComparison.InvariantCultureIgnoreCase))
{
    string[] folders1 = path1.Split(Path.DirectorySeparatorChar);
    string[] folders2 = path2.Split(Path.DirectorySeparatorChar);
    var commonFolders = folders1.TakeWhile((dir, index) => 
        folders2.Length > index &&
        dir.Equals(folders2[index], StringComparison.InvariantCultureIgnoreCase));
    string commonFolderPath = string.Format("{0}{1}"
        , root1
        , Path.Combine(commonFolders.Skip(1).ToArray())); // Skip(1) skips root
    Console.Write(commonFolderPath);
}

结果:
C:\Users\Me\FileFolder

我假设您要查找所有公用文件夹,因此从这两个文件夹共享的路径,请尝试以下操作:

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";

string root1 = Path.GetPathRoot(path1);
string root2 = Path.GetPathRoot(path2);

if (root1.Equals(root2, StringComparison.InvariantCultureIgnoreCase))
{
    string[] folders1 = path1.Split(Path.DirectorySeparatorChar);
    string[] folders2 = path2.Split(Path.DirectorySeparatorChar);
    var commonFolders = folders1.TakeWhile((dir, index) => 
        folders2.Length > index &&
        dir.Equals(folders2[index], StringComparison.InvariantCultureIgnoreCase));
    string commonFolderPath = string.Format("{0}{1}"
        , root1
        , Path.Combine(commonFolders.Skip(1).ToArray())); // Skip(1) skips root
    Console.Write(commonFolderPath);
}

结果:
C:\Users\Me\FileFolder

我假设您要查找所有公用文件夹,因此从这两个文件夹共享的路径,请尝试以下操作:

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";

string root1 = Path.GetPathRoot(path1);
string root2 = Path.GetPathRoot(path2);

if (root1.Equals(root2, StringComparison.InvariantCultureIgnoreCase))
{
    string[] folders1 = path1.Split(Path.DirectorySeparatorChar);
    string[] folders2 = path2.Split(Path.DirectorySeparatorChar);
    var commonFolders = folders1.TakeWhile((dir, index) => 
        folders2.Length > index &&
        dir.Equals(folders2[index], StringComparison.InvariantCultureIgnoreCase));
    string commonFolderPath = string.Format("{0}{1}"
        , root1
        , Path.Combine(commonFolders.Skip(1).ToArray())); // Skip(1) skips root
    Console.Write(commonFolderPath);
}

结果:
C:\Users\Me\FileFolder

替代方法是使用
Zip
TakeWhile
(由Selman22建议)

Selman22的示例略有更改

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = part1.Zip(part2, (p1, p2) => p1 == p2 ? p1 : null)
                            .TakeWhile(s => s != null)
                            .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = Enumerable.Range(0, Math.Min(part1.Length, part2.Length))
                                 .TakeWhile(i => part1[i] == part2[i])
                                 .Select(i => part1[i])
                                 .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);

另一种方法是使用
Zip
TakeWhile
(由Selman22建议)

Selman22的示例略有更改

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = part1.Zip(part2, (p1, p2) => p1 == p2 ? p1 : null)
                            .TakeWhile(s => s != null)
                            .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = Enumerable.Range(0, Math.Min(part1.Length, part2.Length))
                                 .TakeWhile(i => part1[i] == part2[i])
                                 .Select(i => part1[i])
                                 .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);

另一种方法是使用
Zip
TakeWhile
(由Selman22建议)

Selman22的示例略有更改

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = part1.Zip(part2, (p1, p2) => p1 == p2 ? p1 : null)
                            .TakeWhile(s => s != null)
                            .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = Enumerable.Range(0, Math.Min(part1.Length, part2.Length))
                                 .TakeWhile(i => part1[i] == part2[i])
                                 .Select(i => part1[i])
                                 .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);

另一种方法是使用
Zip
TakeWhile
(由Selman22建议)

Selman22的示例略有更改

string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = part1.Zip(part2, (p1, p2) => p1 == p2 ? p1 : null)
                            .TakeWhile(s => s != null)
                            .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);
string path1 = @"C:\Users\Me\FileFolder\File1.info";
string path2 = @"C:\Users\Me\FileFolder\DirectoryContent\Content1\File.info";
string[] part1 = path1.Split(Path.DirectorySeparatorChar);
string[] part2 = path2.Split(Path.DirectorySeparatorChar);
string[] commonParts = Enumerable.Range(0, Math.Min(part1.Length, part2.Length))
                                 .TakeWhile(i => part1[i] == part2[i])
                                 .Select(i => part1[i])
                                 .ToArray();
string commonPath = string.Join(Path.DirectorySeparatorChar.ToString(), commonParts);

使用
Path
类,例如
Path.Combine
Path.directorysepartorchar
@TimSchmelter是的,使用Path类更好,但是Steve是对的,Path.Combine没有添加第一个反斜杠,我不知道为什么。它可能与根文件夹中的冒号有关(C:)使用
Path
类,例如
Path.Combine
Path.directorysepartorchar
@TimSchmelter是的,使用Path类更好,但是Steve是对的,Path.Combine没有添加第一个反斜杠,我不知道为什么。它可能与根文件夹中的冒号有关(C:)使用
Path
类,例如
Path.Combine
Path.directorysepartorchar
@TimSchmelter是的,使用Path类更好,但是Steve是对的,Path.Combine没有添加第一个反斜杠,我不知道为什么。它可能与根文件夹中的冒号有关(C:)使用
Path
类,例如
Path.Combine
Path.directorysepartorchar
@TimSchmelter是的,使用Path类更好,但是Steve是对的,Path.Combine没有添加第一个反斜杠,我不知道为什么。它可能与根文件夹中的冒号有关(C:)