Можете ли вы получить полный путь из монтажной панели при перетаскивании? - PullRequest
0 голосов
/ 06 декабря 2010

Я поддерживаю операцию перетаскивания в IKImageBrowserView.В моем делегате назначения перетаскивания я принимаю NSFilenamesPboardType drop.Странная часть заключается в том, что строки filepath, которые я возвращаю, начинаются с «/ Users / ...» вместо «file: // localhost / ...», как я получаю при использовании NSOpenPanel.Когда я конвертирую их в NSURL для использования IKImageBrowserView для показа изображений, он запутывается, потому что он понимает только полные пути, начинающиеся с «file: // localhost / ...».Я могу взломать префикс, как я делал во фрагменте ниже, но мне было интересно, есть ли программный способ получить полные пути вместо этого?

if ([[pasteboard types] containsObject:NSFilenamesPboardType])
{
    NSData* data = [pasteboard dataForType:NSFilenamesPboardType];
    if (data)
    {
        NSString* errorDescription;
        NSArray* filenames = [NSPropertyListSerialization
            propertyListFromData:data
            mutabilityOption:kCFPropertyListImmutable
            format:nil
            errorDescription:&errorDescription];

        for (id filename in filenames)
        {   
            NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"file://localhost%@", filename]];

            NSLog(@"Adding URL: %@", url);

1 Ответ

5 голосов
/ 06 декабря 2010

Чтобы создать URL файла из полного пути, не добавляйте префикс file:// самостоятельно.Просто используйте

    NSURL* url=[NSURL fileURLWithPath:pathString];

См. документацию .

С точки зрения операционной системы,

   /Users/myname/file.txt

- это полный путьфайла в системе.В API более высокого уровня, который также обеспечивает доступ к различным сетям, локальный файл различается путем установки протокола file://.Эти pboard API предшествуют распространенному использованию URL в API, поэтому он возвращает пути в виде полных путей, а не файловых URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...