Есть ли способ определить, был ли файл, расположенный в iCloudDrive, перемещен в корзину iCloudDrive? Я мог бы проверить, что URL-адрес содержит «.Trash», но я ищу официальный способ получить это.
Определить, находится ли файл в корзине iCloudDrive
Ответы (2)
Чтобы определить, находится ли файл/папка в корзине, используйте следующий код:
NSURLRelationship relationship;
NSError *error;
[[NSFileManager defaultManager] getRelationship:&relationship ofDirectory:NSTrashDirectory inDomain:0 toItemAtURL:URL error:&error];
if (relationship == NSURLRelationshipContains) {
//file is in trash
}
person
Marek H
schedule
20.11.2017
Пожалуйста, добавьте краткое описание того, что делает ваш код, иначе этот вопрос можно легко расценить как некачественный.
- person briosheje; 20.11.2017
С этим кодом есть некоторые проблемы: 1. Он игнорирует
error
, а это значит, что если relationship
предварительно обнулить, то в случае ошибки он выдаст неверный результат. 2. Не работает с файлами, удаленными из папки iCloud (например, если в Catalina папки Deskop и Documents синхронизированы с iCloud), в ~/Library/Mobile Documents/com~apple~CloudDocs/.Trash
, потому что тогда возвращается ошибка (Код=3328 Запрошенная операция не может быть выполнена завершено, поскольку эта функция не поддерживается.)
- person Thomas Tempelmann; 03.11.2020
Примечание. Моя вторая часть предыдущего комментария предназначена для macOS, а не для iOS.
- person Thomas Tempelmann; 03.11.2020
Также обратите внимание, что если элемент является символической ссылкой, и если эта символическая ссылка теперь указывает в никуда (т. е. не на существующий файл или папку), вы также получите сообщение об ошибке 3328. См. stackoverflow.com/q/64663834/43615
- person Thomas Tempelmann; 10.11.2020
Нашел достойный способ обнаружить это. Начиная с iOS11 возможен следующий подход:
NSURL* fileURL; // any file URL pointing to a file resource
NSURL* trashURL = [NSFileManager.defaultManager URLForDirectory:NSTrashDirectory inDomain:NSUserDomainMask appropriateForURL: fileURL create:NO error:NULL];
if (trashURL && [fileURL.path hasPrefix:trashURL.path])
{
// fileURL is located in the iCloudDrive trash
}
person
berbie
schedule
12.10.2017
Убедитесь, что вы получили канонический путь вашего URL-адреса файла, прежде чем тестировать его таким образом, т. е. получив NSURLCanonicalPathKey или вызвав
[NSString stringByResolvingSymlinksInPath]
. Без этого вы можете использовать путь, который указывает на корзину через символические ссылки, и тогда ваша проверка не сработает.
- person Thomas Tempelmann; 10.11.2020