File 使用c语言比较两条路径获得重复路径#
我有两个文件路径 例如: 路径1File 使用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
C:\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.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:)