Цель C - копия файла в формате Юникод (урду) - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь подписаться на перемещение на мусорное событие MacOS и копирование папки обратно.Код прекрасно работает с английскими буквами по умолчанию, но когда я использую язык урду и формат урду copyItemAtPath не может найти папку при копировании.

Обратный вызов:

void fsevents_callback(ConstFSEventStreamRef streamRef,
    void * userData,
    size_t numEvents,
    void * eventPaths,
    const FSEventStreamEventFlags eventFlags[],
    const FSEventStreamEventId eventIds[]) {
    FSEventsListener * eventListener = (__bridge FSEventsListener * ) userData;
    char ** paths = eventPaths;

    for (int i = 0; i < numEvents; i++) {
        NSString * name = [NSString stringWithFormat: @ "%s", paths[i]];
        NSLog(@ "Path: %@ (flag = %d)", name, eventFlags[i]);

        if (eventFlags[i] & kFSEventStreamEventFlagItemRenamed) {
            [eventListener.delegate fileWasRenamed: name];
        } else {
            [eventListener.delegate fileWasTouched: name];
        }
    }
}

Слушатель:

- (void)fileWasRenamed:(NSString *)aPath
{
    NSString *trashPath = [NSSearchPathForDirectoriesInDomains(NSTrashDirectory, NSUserDomainMask, YES) lastObject];
    if (nil != aPath && NSNotFound != [aPath rangeOfString:trashPath].location)
    {
        NSString *trashFilePath = aPath;
        if (nil != self.removedFilePath && NSNotFound != [trashFilePath.lastPathComponent rangeOfString:self.removedFilePath.lastPathComponent.stringByDeletingPathExtension].location)
        {
            NSError *error = nil;
            NSFileManager *fileManager = [NSFileManager defaultManager];
            BOOL isCopied = [fileManager copyItemAtPath:trashFilePath toPath:self.removedFilePath error:&error];
        }
    }
}

И когда я пытаюсь скопировать, я получаю ошибку:

Ошибка домена = NSPOSIXErrorDomain Code = 2 "Нет такого файла или каталога"

Имя файла в корзине: Моя папка ۱۷.۵۷.۴۴

1 Ответ

0 голосов
/ 25 апреля 2018
[NSString stringWithFormat: @ "%s", paths[i]];

, очевидно, не является допустимым способом работы со строками Unicode.Использование

[NSString stringWithUTF8String:paths[i]];

вместо этого должно помочь.

...