Ios Cocoa Swift,在文件和目录上设置隐藏(可见/不可见)标志
我想测试文件系统上的文件或目录是否有某个标志,在本例中是“隐藏”标志,然后设置或删除它。我知道这可以通过命令行实现,但我想知道是否可以使用Cocoa/Swift来实现 我尝试使用Ios Cocoa Swift,在文件和目录上设置隐藏(可见/不可见)标志,ios,swift,macos,cocoa,Ios,Swift,Macos,Cocoa,我想测试文件系统上的文件或目录是否有某个标志,在本例中是“隐藏”标志,然后设置或删除它。我知道这可以通过命令行实现,但我想知道是否可以使用Cocoa/Swift来实现 我尝试使用NSFileManagerattributesFiteMatPath,但返回的对象不包含标志 例如: let fm = NSFileManager.defaultManager() do { let testLibrary = try fm.attributesOfItemAtPath(dataPath)
NSFileManager
attributesFiteMatPath
,但返回的对象不包含标志
例如:
let fm = NSFileManager.defaultManager()
do {
let testLibrary = try fm.attributesOfItemAtPath(dataPath)
print (testLibrary)
} catch let error as NSError {
print("JSON Error: \(error.localizedDescription)")
}
返回:
["NSFileCreationDate": 2013-08-16 21:37:57 +0000,
"NSFileGroupOwnerAccountName": staff,
"NSFileType": NSFileTypeDirectory,
"NSFileSystemNumber": 16777220,
"NSFileOwnerAccountName": xjx,
"NSFileReferenceCount": 61,
"NSFileModificationDate": 2015-10-22 07:25:12 +0000,
"NSFileExtensionHidden": 0,
"NSFileSize": 2074,
"NSFileGroupOwnerAccountID": 20,
"NSFileOwnerAccountID": 501,
"NSFilePosixPermissions": 448,
"NSFileSystemFileNumber": 603923]
为了进行比较,当我在我的主目录中执行ls-lO
时,我会看到以下内容(注意“Library”上的隐藏标志):
您可以为此使用
NSURL
API;下面是一个例子:
// Create an NSURL object
let url = NSURL(fileURLWithPath: "/path/to/some/file.txt")!
// Catching errors
var error: NSError?
// Setting isHidden
let isHidden = NSNumber(bool: true)
if !url.setResourceValue(isHidden, forKey: NSURLIsHiddenKey, error: &error) {
println(error?.localizedDescription)
}
// Getting isHidden
var value: AnyObject?
if !url.getResourceValue(&value, forKey: NSURLIsHiddenKey, error: &error) {
println(error?.localizedDescription)
} else {
var boolAsString = (value as! NSNumber).boolValue ? "TRUE" : "FALSE"
println("\(url.path!) is hidden: \(boolAsString)")
}
关键的方法是setResourceValue(uwy:forKey:error:)
和
getResourceValue(uu3;:forKey:error:)
。在每种情况下,键
参数都是URL的资源属性之一-在页面底部提供了最常见的资源属性列表 Xcode 11•Swift 5,Xcode 9•Swift 4或Xcode 8•Swift 3
扩展URL{
///'true'隐藏(不可见)或'false'不隐藏(可见)
var isHidden:布尔{
得到{
返回(try?resourceValues(forKeys:[.isHiddenKey])?.isHidden==true
}
设置{
var resourceValues=URLResourceValues()
resourceValues.isHidden=newValue
做{
尝试设置resourceValues(resourceValues)
}抓住{
打印(“isHidden错误:,错误)
}
}
}
}
前面的答案并不完全有效,但它们让我走上了正确的道路,所以我设法找到了一个满足我需求的解决方案
获取:
let myUrl = NSURL(fileURLWithPath: "my/path")
var isHidden: AnyObject?
do {
try myUrl.getResourceValue(&isHidden, forKey: NSURLIsHiddenKey)
return (isHidden as? NSNumber)?.boolValue ?? false
} catch let error as NSError {
print(error.debugDescription)
return false
}
let myUrl = NSURL(fileURLWithPath: "my/path")
do {
try libraryUrl.setResourceValue(true, forKey: NSURLIsHiddenKey)
} catch let error as NSError {
print(error.localizedDescription)
return
}
设置:
let myUrl = NSURL(fileURLWithPath: "my/path")
var isHidden: AnyObject?
do {
try myUrl.getResourceValue(&isHidden, forKey: NSURLIsHiddenKey)
return (isHidden as? NSNumber)?.boolValue ?? false
} catch let error as NSError {
print(error.debugDescription)
return false
}
let myUrl = NSURL(fileURLWithPath: "my/path")
do {
try libraryUrl.setResourceValue(true, forKey: NSURLIsHiddenKey)
} catch let error as NSError {
print(error.localizedDescription)
return
}
现在我也学会了扩展。谢谢你的回答;-)