Swift调用OC之文件操作-NSFileManager

//***************************************************

//

//    >>>>>>>Swift调用OC之文件操作-NSFileManager<<<<<<<

//

// **** 本节内容 ****

//

// 1.目录查询

// 2.路径查询

// 3.路径操作

//   --创建目录

//   --创建文件

//   --拷贝/删除/移动文件/目录

//   --获取文件访问权限

//

//***************************************************

 

import Foundation

 

//====================================

//

//*******   NSFileManager   *********

//

//====================================

 

//使用实例defaultManager()来处理文件操作

let manager = NSFileManager.defaultManager()

 

//>>>>>>>>目录查询<<<<<<<<<

 

//获取目录有两个方法:URLsForDirectory和URLForDirectory

//方法区别在于URLForDirectory还可以创建临时目录

 

//获得当前用户域下的Library/Application Support目录

let urlsForDirectory = manager.URLsForDirectory(NSSearchPathDirectory.ApplicationSupportDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)  //file:///Users/.../Library/Containers/.../Data/Library/Application%20Support/

 

//获得当前用户域下Documents目录

let urlForDirectory = manager.URLForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomain: NSSearchPathDomainMask.UserDomainMask,appropriateForURL: nil, create: true, error: nil)// file:///Users/.../Library/Containers/.../Data/Documents/

 

//>>>>>>>>路径查询<<<<<<<<<<<<<<<<<<

// 1.浅搜索,只搜索当前目录层

//   --方法1:contentsOfDirectoryAtPath

//   --方法2:contentsOfDirectoryAtURL

//   --区别在于方法1只返回文件和目录,方法2会把完整路径都返回

// 2.深度遍历,遍历到子目录下的内容(符号链接不处理)

//   --方法1:enumeratorAtPath

//   --方法2:enumeratorAtURL

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 

let urlForDocument = manager.URLsForDirectory( NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask) //

 

let url = urlForDocument[0] asNSURL

var error: NSErrorPointer = nil

 

//浅搜索1:contentsOfDirectoryAtPath

let contentsOfPath_Shallow = manager.contentsOfDirectoryAtPath(url.path!,error: error)

 

//浅搜索2:contentsOfDirectoryAtURL

//includingPropertiesForKeys参数是指特定条件,如创建时间

let contentsOfURL_Shallow = manager.contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles,error: error)

 

//深度遍历1:enumeratorAtPath

let contentsOfPath_Deep = manager.enumeratorAtPath(url.path!)

println(contentsOfPath_Deep?.allObjects//[folder, folder/new.txt, text123.txt]

 

//深度遍历2:enumeratorAtURL

let contentsOfURL_Deep = manager.enumeratorAtURL(url,includingPropertiesForKeys:nil , options: NSDirectoryEnumerationOptions.SkipsHiddenFiles,errorHandler: nil)

 

 

//>>>>>>>>    路径操作  <<<<<<<<<<<

// 

// 1.创建目录:createDirectoryAtURL

// 2.创建文件:createFileAtPath

//   --将缓存NSData的数据写入成文件

// 3.拷贝:copyItemAtPath

//

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 

//1.创建目录:createDirectoryAtURL

//withIntermediateDirectories:true表示如果当前路径所指定的目录中父目录不存在,那么就连同父目录一起创建

func createFolder(#FolderName: String, #BaseUrl: NSURL){

    let manager = NSFileManager.defaultManager()

    var error: NSErrorPointer= nil

    let folder = BaseUrl.URLByAppendingPathComponent(FolderName,isDirectory: true)

    println("folder =\(folder)")

    let exist = manager.fileExistsAtPath(folder.path!)

    if !exist {

       let createSuccess = manager.createDirectoryAtURL(folder,withIntermediateDirectories: true,attributes: nil, error: error)

       println("createfolder success = \(createSuccess)")

    }

}

 

//2.创建文件:createFileAtPath

func createFile(#FileName : String, #FileBaseUrl : NSURL){

    let manager = NSFileManager.defaultManager()

    var error : NSErrorPointer= nil

    let file = FileBaseUrl.URLByAppendingPathComponent(FileName)

    println("file = \(file)")

    let exist = manager.fileExistsAtPath(file.path!)

    if !exist {

       let data = NSData(base64EncodedString:"aGVsbG8gd29ybGQ=", options:.IgnoreUnknownCharacters)

       let createSuccess = manager.createFileAtPath(file.path!,contents: data, attributes: nil)

       println("createfile success = \(createSuccess)")

    }

}

 

 

//---------  3.拷贝文件/目录  -----------

//***方法:copyItemAtPath

//---将指定路径下的一个文件(test.txt)拷贝到对应目录下另外一个文件(copyed.txt)

//---将指定路径下的一个目录拷贝到对应目录

//---当前进程要有读取srcURL的权限并且有toUrl的父级目录的写权限

let urlForDocument1 = manager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)

let url1 = urlForDocument1[0] asNSURL//URLsForDirectory返回的是[AnyObject],所以要转换

var error1: NSErrorPointer = nil

 

createFile(FileName: "test1.txt",FileBaseUrl: url1)

createFile(FileName: "folder",FileBaseUrl: url1)

createFile(FileName: "folder/new1.txt",FileBaseUrl: url1)

 

let srcUrl = url1.URLByAppendingPathComponent("test1.txt") //换成folder则拷贝目录

 

let toUrl = url1.URLByAppendingPathComponent("copyed.txt")

 

let copyItemSuccess = manager.copyItemAtPath(srcUrl.path!, toPath: toUrl.path!, error: error) //返回BOOL

 

 

 

//---------  4.删除文件/目录  -----------

//***方法:removeItemAtURL

//---当前进程要有toUrl的父级目录的写权限

 

let removeItemSuccess = manager.removeItemAtURL(toUrl,error: error)

 

 

 

//---------  5.移动文件/目录  -----------

//***方法:moveItemAtURL

//---当前进程要有srcUrl和toUrl的父级目录的写权限

 

let moveItemSuccess = manager.moveItemAtURL(srcUrl,toURL: toUrl, error: error)

 

//---------  6.文件访问权限  -----------

let displayName = manager.displayNameAtPath(url.path!)  //返回本地化名:Documents

 

let file6 = url.URLByAppendingPathComponent("copyed.txt") //返回完整路径的Documents/test.txt

 

//获取权限属性

let readable = manager.isReadableFileAtPath(file6.path!)        //true

let writeable = manager.isWritableFileAtPath(file6.path!)       //true

let executable = manager.isExecutableFileAtPath(file6.path!)    //false

let deleteable = manager.isDeletableFileAtPath(file6.path!)     //true

 

//获取各种属性,比如创建时间,文件大小,文件类型等

let attributes = manager.attributesOfItemAtPath(file6.path!, error: error)

println(attributes!)

/*

[NSFileOwnerAccountID:501, NSFileSystemFileNumber: 3955613, NSFileExtensionHidden: 0,NSFileSystemNumber: 16777218, NSFileSize: 11, NSFileGroupOwnerAccountID: 20,NSFilePosixPermissions: 420, NSFileCreationDate: 2015-02-02 14:03:19 +0000,NSFileType: NSFileTypeRegular, NSFileGroupOwnerAccountName: staff,NSFileReferenceCount: 1, NSFileModificationDate: 2015-02-02 14:03:19 +0000]

*/

 

 

//获取内容数据:contentsAtPath

//目录不正确或者获取错误则返回nil

let data6 = manager.contentsAtPath(file6.path!)

 

 

//比较文件/目录内文件是否相同

let contentIsEqual = manager.contentsEqualAtPath(file6.path!, andPath: toUrl.path!) //true 都是test.txt


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值