文件已从应用中删除,但仍占用相同的空间?

时间:2016-04-10 10:42:22

标签: ios swift local-storage

当我通过iTunes删除我的应用程序文件时,空间仍然被占用,直到我删除并重新安装该应用程序。如果我列出了我的应用程序文档目录的内容,则表示没有文件,所以我想知道是否有相当于垃圾文件夹的文件。如果没有,我应该怎么做才能恢复这个空间?

此应用程序正在利用UIImagePickerController录制视频,然后将其保存在应用程序的本地存储空间中。正是这些录音暴露给iTune("应用程序支持iTunes文件共享"在plist中),因此我可以在开发期间添加和删除文件。

我用来将文件保存到应用程序存储空间的代码:

extension VideoRecorderViewController: UIImagePickerControllerDelegate {

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

        let mediaType = info[UIImagePickerControllerMediaType]
        if mediaType!.isEqualToString(kUTTypeMovie as String) {
            let documentsUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!

            if let mediaURL = info[UIImagePickerControllerMediaURL] as? NSURL {

                let dateFormatter = NSDateFormatter()
                dateFormatter.timeZone = NSTimeZone(name: "UTC")
                dateFormatter.dateFormat = "yyyyMMddHHmmss"
                let baseFilename = dateFormatter.stringFromDate(NSDate())

                // Write out to application's storage area
                let videoData = NSData(contentsOfURL: mediaURL)
                let dataPath = documentsUrl.filePathURL?.path?.stringByAppendingPathComponent("\(baseFilename).MOV")
                videoData?.writeToFile(dataPath!, atomically: true)
            }
        }
    }
}

我用来列出应用程序存储空间中的文件的代码:

let directoryUrls = try  NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())

print ("all files:")
for entry in directoryUrls {
    let directoryItem : NSURL = entry
    print("   ", directoryItem.absoluteString)
}

还尝试从TemporaryDirectory中删除:

func clearTmpDirectory() {

    do {
        let tmpDirectoryFiles  =  try NSFileManager.defaultManager().contentsOfDirectoryAtPath(NSTemporaryDirectory())
        print ("all files:")
        for entry in tmpDirectoryFiles {
            print("Removing: ", entry)
            do {
                try NSFileManager.defaultManager().removeItemAtPath(entry)
            } catch let error as NSError {
                print("error", error)
            }
        }
    } catch let error as NSError {
        print("error", error)
    }
}

我一直在寻找答案,但我还没找到任何答案。任何人都可以提出我可能忽略的内容吗?

BTW我确实检查了CachesDirectory和MoviesDirectory。前者存在,但没有文件占用空间而后者不存在。刚刚检查了UserDirectory,但返回了一个nil列表。

1 个答案:

答案 0 :(得分:0)

虽然我仍然不确定为什么清除TemporaryDirectory没有释放我希望的空间(洞察力仍然会被欣赏),更改用于存储持久视频捕获的代码的代码有助于。我将writeToFile方法更改为文件移动,例如:

do {

    try NSFileManager.defaultManager().moveItemAtPath(mediaURL.path!, toPath: dataPath!)

} catch let error as NSError {
    print("Error: ", error)
}