#cocoa #finder
#cocoa #поисковик
Вопрос:
Эти файлы создаются всякий раз, когда вы перетаскиваете выделенный текст в Finder. Размер файла всегда 0 bytes
. По-видимому, данные хранятся в разветвлении ресурсов.
Я попытался прочитать раздел ресурсов [1], но получил код ошибки -39
(конец файла).
Вот еще несколько подробностей о файле:
$>xattr test.textClipping
com.apple.FinderInfo
com.apple.ResourceFork
Комментарии:
1. Предупреждение: «Сжатие» в macOS Sierra и High Sierra Finder уничтожает разветвление ресурсов для файлов .textClipping при сжатии.
Ответ №1:
Файл textClipping — это старомодный файл с разделением ресурсов. Вы захотите открыть его с помощью FSOpenResourceFile
, а затем использовать Get1Resource
для чтения ресурсов из файла. Файл может содержать несколько различных типов ресурсов для текста: ‘RTF’ (форматированный текст), ‘utxt’ (UTF-8), ‘utf8’ (UTF-8) или ‘TEXT’ (ASCII) ресурсы типа, все с идентификатором 256. После того, как вы прочитаете ресурс, извлеките данные из дескриптора и делайте с ним, что хотите.
Комментарии:
1. Как я могу получить доступ к различным типам данных (мне удалось прочитать данные)?
Ответ №2:
Похоже, что в macOS 10.12 Sierra файл .textClipping теперь является списком свойств.
Корневой словарь имеет ключ «UTI-Data». В нем ключи: com.apple.traditional-mac-plain-text, public.utf16-plain-text и public.utf8-plain-text содержат несколько разных представлений данных.
Вот пример, который будет считываться из пути:
NSString *path = @"/path/to/file.textClipping";
NSData *data = [NSData dataWithContentsOfFile:path];
id plist = [NSPropertyListSerialization propertyListWithData:data options:0 format:nil error:amp;error];
NSString *text;
if (plist amp;amp; error == nil) {
NSDictionary *utiData = [plist objectForKey:@"UTI-Data"];
text = [utiData objectForKey:@"public.utf8-plain-text"];
}
Комментарии:
1. Вы можете конвертировать в xml с помощью ‘$ plutil —convert xml1 file.textClipping’. Выполните man plutil и выполните plutil -справка для получения дополнительной информации. Он перезаписывает оригинал, если вы не используете -o filename. (это в mojave 10.14)
Ответ №3:
Найдите FSOpenFork и FSReadFork. (У Apple есть образец кода под названием AudioCDSample).
Существует также средство командной строки, которое может читать эти файлы (/usr / bin / DeRez), возможно, вы захотите посмотреть на него в GDB, но из того, что я видел, оно использует устаревшие API (т.Е. FSRead вместо FSReadFork).
Комментарии:
1. Пример кода больше недоступен по этой ссылке, но он доступен в виде архива stuffit на этом зеркале .