NSFileManager переименовывает файл, используя «moveItemAtURL:», имя которого содержит разделитель пути, например «foo / bar.extension» - PullRequest
0 голосов
/ 06 февраля 2020

Это кажется странным, мой код выглядит так просто, как

// something like "foo/bar"
NSString *correctFileName = seriesDict[seriesNumber];
if (correctFileName.length > 0)
{
    // So I'll have a fileName like "foo/bar.extension" which looks like a directory and a file in it...
    NSString *pathExtension = [filePath pathExtension];
    NSString *correctFilePath = [[[filePath stringByDeletingLastPathComponent]
                                    stringByAppendingPathComponent:correctFileName]
                                    stringByAppendingPathExtension:pathExtension];

    NSError *error = nil;
    [[NSFileManager defaultManager] moveItemAtPath:filePath toPath:correctFilePath error:&error];

    // And NSFileManager can not treat it as a legal fileName, kind of expected...   
    if (error)
    {
        NSLog(@"Rename file at %@ failed, error: %@", filePath, error);
    }
}

Кажется, можно переименовать мой файл в "foo / bar.extension" в Finder, например,

enter image description here

может быть решение для этого в коде.

Если кто-то мог бы крошиться в каком-то свете, это будет высоко оценено.

1 Ответ

0 голосов
/ 07 февраля 2020

/ в Finder преобразуется в :. / недопустимо в путях POSIX-стиля, в то время как : недопустимо в путях HFS-стиля, поэтому macOS отображает эти два символа друг на друга.

Технически правильным способом было бы создать CFURL используя CFURLCreateWithFileSystemPathRelativeToBase, указав kCFURLHFSPathStyle в качестве стиля пути и сопоставив его с базовым URL, который вы уже создали. Затем вы скопируете путь полного URL-адреса, используя CFURLCopyFileSystemPath.

Прагматично говоря, вы можете просто заменить строку между / и :.

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