gpt4 book ai didi

objective-c - 如何获取 Cocoa/Obj-C 中两个或多个文件的共同祖先目录?

转载 作者:行者123 更新时间:2023-12-03 16:50:58 25 4
gpt4 key购买 nike

我有一堆文件,要么是 NSString 要么是 NSURL(这并不重要;它们在大多数情况下是可以互换的),并且我需要一种方法来找到共同的祖先目录。有谁知道该怎么做吗?

最佳答案

我可以发誓某处有一个 pathByJoiningPathComponents 方法,或者至少有一个类似的方法,但我一定在想别的东西。这对路径有用,如果你使用的是 10.6,它也可能适用于 URL(我只用路径测试过):

NSString *path1 = @"/path/to/file1.txt";
NSString *path2 = @"/path/to/file/number2.txt";

NSArray *path1Comps = [path1 pathComponents];
NSArray *path2Comps = [path2 pathComponents];

NSUInteger total = [path1Comps count];
if ([path2Comps count] < total)
total = [path2Comps count]; // get the smaller of the two

NSUInteger i;
for (i = 0; i < total; i++)
if (![[path1Comps objectAtIndex:i] isEqualToString:[path2Comps objectAtIndex:i]])
break;

NSArray *commonComps = [path1Comps subarrayWithRange:NSMakeRange(0, i)];

// join commonComps together to get the common path as a string

不幸的是,我认为没有“内置”方法可以做到这一点。

如果您有一个要查找共同祖先的文件路径数组,您可以执行以下操作:

NSArray *allPaths = [NSArray arrayWithObjects:@"/path/to/1.txt", @"/path/to/number/2.txt", @"/path/to/number/3/file.txt", nil];

// put some checks here to make sure there are enough paths in the array.

NSArray *currentCommonComps = [[allPaths objectAtIndex:0] pathComponents];

for (NSUInteger i = 1; i < [allPaths count]; i++)
{
NSArray *thisPathComps = [[allPaths objectAtIndex:i] pathComponents];
NSUInteger total = [currentCommonComps count];
if ([thisPathComps count] < total)
total = [thisPathComps count];

NSUInteger j;
for (j = 0; j < total; j++)
if (![[currentCommonComps objectAtIndex:j] isEqualToString:[thisPathComps objectAtIndex:j]])
break;

if (j < [currentCommonComps count])
currentCommonComps = [currentCommonComps subarrayWithRange:NSMakeRange(0, j)];

if ([currentCommonComps count] == 0)
break; // no point going on
}

// join currentCommonComps together

如果您想保持自动释放池干净,您可能需要显式分配和释放其中一些对象,特别是当您有大量路径时。

关于objective-c - 如何获取 Cocoa/Obj-C 中两个或多个文件的共同祖先目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com