当前位置: 首页 > 面试题库 >

如何在OS X上使用Swift获取目录大小

乐正远航
2023-03-14
问题内容

我正在尝试获取目录的大小以及使用Swift在OS
X上的内容。到目前为止,我只能获得目录本身的大小,而没有内容。对于我的大多数目录,它通常显示6148个字节的值,但它的确有所不同。

我已经尝试了下面文件中的directorySize()函数,但它也返回了6,148个字节。

https://github.com/amosavian/ExtDownloader/blob/2f7dba2ec1edd07282725ff47080e5e7af7dabea/Utility.swift

我尝试了该问题的前2个答案,但不确定将Swift传递给Objective-C函数所需的参数。我相信它需要一个指针(我是学习的入门程序员)。

我正在使用Xcode 7.0并运行OS X 10.10.5。


问题答案:

更新: Xcode 11.4.1•Swift 5.2

extension URL {
    /// check if the URL is a directory and if it is reachable 
    func isDirectoryAndReachable() throws -> Bool {
        guard try resourceValues(forKeys: [.isDirectoryKey]).isDirectory == true else {
            return false
        }
        return try checkResourceIsReachable()
    }

    /// returns total allocated size of a the directory including its subFolders or not
    func directoryTotalAllocatedSize(includingSubfolders: Bool = false) throws -> Int? {
        guard try isDirectoryAndReachable() else { return nil }
        if includingSubfolders {
            guard
                let urls = FileManager.default.enumerator(at: self, includingPropertiesForKeys: nil)?.allObjects as? [URL] else { return nil }
            return try urls.lazy.reduce(0) {
                    (try $1.resourceValues(forKeys: [.totalFileAllocatedSizeKey]).totalFileAllocatedSize ?? 0) + $0
            }
        }
        return try FileManager.default.contentsOfDirectory(at: self, includingPropertiesForKeys: nil).lazy.reduce(0) {
                 (try $1.resourceValues(forKeys: [.totalFileAllocatedSizeKey])
                    .totalFileAllocatedSize ?? 0) + $0
        }
    }

    /// returns the directory total size on disk
    func sizeOnDisk() throws -> String? {
        guard let size = try directoryTotalAllocatedSize(includingSubfolders: true) else { return nil }
        URL.byteCountFormatter.countStyle = .file
        guard let byteCount = URL.byteCountFormatter.string(for: size) else { return nil}
        return byteCount + " on disk"
    }
    private static let byteCountFormatter = ByteCountFormatter()
}

用法:

do {
    let documentDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    if let sizeOnDisk = try documentDirectory.sizeOnDisk() {
        print("Size:", sizeOnDisk) // Size: 3.15 GB on disk
    }
} catch {
    print(error)
}


 类似资料:
  • 问题内容: function foldersize($path) { $total_size = 0; $files = scandir($path); 在脚本执行完成之前,为什么处理器使用率会过高或100%升高?可以做些什么来优化它吗?还是有其他方法可以检查文件夹和其中的文件夹大小? 问题答案: 以下是其他地方提供的其他解决方案: 如果在Windows主机上: 否则,如果在Linux主机上:

  • 我对python和子流程模块比较陌生。 我正在尝试使用mac OSX上的子进程来获得python的目录大小。os.walk对于大型目录需要很长时间。我希望通过shell命令得到子进程来完成这一操作,并加快结果。这个shell命令对我有效,但我不能从子进程中使它工作? (cd/test_folder_path&ls-nr grep-v“^D”awk“{total+=$5}END{print tota

  • 问题内容: 考虑以下代码: 是一个文件,它可能存在也可能不存在。我想使用对象获取目录。我该怎么做呢? 问题答案: 无论哪种情况,我都希望(或)给您您想要的。 此外,如果你想找出原来是否 确实 存在且 是 一个目录,然后和你以后在做什么。

  • 问题内容: 我在Xcode中创建了一个空项目。 当我按下运行按钮时,它显示一个窗口。如何更改其外观,例如窗口的透明度等。 我已经搜索了很多,但是每个人都使用变量来像这里一样进行更改,但是如何创建实例? 我是Mac应用程序开发的新手。有人可以写一个详细的答案吗? 谢谢! 问题答案: 您可以按如下方式获取应用程序窗口的实例: 从NSApp获取窗口(共享应用程序实例的全局常量): 或覆盖或访问视图的wi

  • 问题内容: 我在用 这些代表从我的画廊或我的相机中选择图像。那么,选择图像后如何获得图像文件的大小? 我想使用这个: 但是在这里我需要一个路径,但是如果没有路径,如何仅通过图像文件就能获得路径呢? 问题答案: 请检查google的1 kb到1000字节。 https://www.google.com/search?q=1+kb+%3D+how+many+bytes&oq=1+kb+%3D+how+

  • 问题内容: 我有一个NSURLSession调用dataTaskWithRequest以这种方式发送POST请求 响应等于: 我的问题是我不知道如何获取名称为MYCOOKIEIS的“ Set-Cookie”中的cookie。 我将在用户登录时使用它,因此,如果用户未登录->登录(调用登录api),否则请转到主屏幕并调用其他API。 有人可以帮助我从那里拿走饼干吗? 问题答案: Swift呈现形式可