Приложение для обмена файлами iTunes: мониторинг входящих данных в режиме реального времени

Я работаю над проектом iOS, который поддерживает функцию обмена файлами iTunes. Целью является отслеживание в реальном временивходящих/изменяемых данных.

Я использую (немного модифицированный)класс DirectoryWatcherиз примера кода Apple. а также попробовал этот исходный код.

Данные представлены в формате NSBundle (*.bundle), размер некоторых пакетов составляет 100-500 МБ, в зависимости от их содержимого, некоторых видео/аудиоматериалов. В пакетах есть файл дескриптора на основе xml.

Проблема заключается в том, что любой из этих кодов выше запускает уведомлениеили что-то еще, когда данные только начинают копироваться, но не когда процесс копирования/изменения/удаления полностью завершен.

Далее пробовал:

проверка атрибутов файла:

NSDictionary *fileAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:[contURL path] error:nil];
BOOL fileBusy = [[fileAttrs objectForKey:NSFileBusy] boolValue];

поиск изменений размера файла:

dispatch_async(_checkQueue, ^{
    for (NSURL *contURL in tempBundleURLs) {
        NSInteger lastSize = 0;
        NSDictionary *fileAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:[contURL path] error:nil];
        NSInteger fileSize = [[fileAttrs objectForKey:NSFileSize] intValue];

        do {
            lastSize = fileSize;
            [NSThread sleepForTimeInterval:1];

            fileAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:[contURL path] error:nil];
            fileSize = [[fileAttrs objectForKey:NSFileSize] intValue];

            NSLog(@"doing job");
        } while (lastSize != fileSize);

        NSLog(@"next job");
    }
);

какие-либо другие решения?

Приведенное выше решение отлично подходит для bin-файлов, но не для .bundle (поскольку файлы .bundle на самом деле являются каталогами). Чтобы заставить его работать с .bundle, вы должны перебрать каждый файл внутри .bundle

5
задан Community 23 May 2017 в 12:33
поделиться

0 ответов