如何在Xcode/Swift中列出指定项目文件夹内的文件?
如何列出指定项目文件夹中的文件列表
你当前的代码仅能读取App Bundle中单个已知名称的文件,要实现列出指定文件夹内所有文件的功能,需要借助FileManager来遍历目录内容。以下分两种常见场景给出实现方案:
场景1:列出App Bundle内的指定文件夹文件
如果你的目标文件夹是打包进App Bundle的资源目录,可按以下步骤实现:
- 获取Bundle中目标文件夹的路径
- 使用
FileManager读取该目录下的所有文件/子目录
示例代码:
static func listFilesInBundleFolder(folderName: String) { // 获取Bundle中目标文件夹的路径 guard let folderPath = Bundle.main.path(forResource: folderName, ofType: nil) else { print("指定文件夹不存在于App Bundle中") return } do { // 获取文件夹内所有文件和子目录的名称 let allItems = try FileManager.default.contentsOfDirectory(atPath: folderPath) print("文件夹「\(folderName)」内的内容:") for itemName in allItems { // 可选:过滤仅显示文件(排除子目录) let fullPath = "\(folderPath)/\(itemName)" var isDirectory: ObjCBool = false if FileManager.default.fileExists(atPath: fullPath, isDirectory: &isDirectory), !isDirectory.boolValue { print("- \(itemName)") // 若需要读取该文件内容,可在此处添加读取逻辑 do { let content = try String(contentsOfFile: fullPath, encoding: .utf8) print(" 内容预览:\(content.prefix(50))...") // 仅显示前50个字符 } catch { print(" 读取失败:\(error.localizedDescription)") } } } } catch { print("读取文件夹内容失败:\(error.localizedDescription)") } }
注意:在Xcode中添加文件夹时,需选择Create folder references(而非Create groups),否则Bundle中不会保留原有的文件夹结构。
场景2:列出App沙盒内的指定文件夹文件
如果目标文件夹是App沙盒中的目录(比如Documents下的自定义文件夹),可使用以下代码:
static func listFilesInSandboxFolder(folderName: String) { // 获取Documents目录路径 guard let documentsDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { print("无法获取Documents目录") return } let folderPath = "\(documentsDir)/\(folderName)" let fileManager = FileManager.default // 若文件夹不存在,先创建 if !fileManager.fileExists(atPath: folderPath) { do { try fileManager.createDirectory(atPath: folderPath, withIntermediateDirectories: true) print("已创建文件夹:\(folderPath)") } catch { print("创建文件夹失败:\(error.localizedDescription)") return } } // 读取文件夹内文件 do { let fileNames = try fileManager.contentsOfDirectory(atPath: folderPath) print("沙盒文件夹「\(folderName)」内的文件:") for fileName in fileNames { print("- \(fileName)") } } catch { print("读取沙盒文件夹失败:\(error.localizedDescription)") } }
内容的提问来源于stack exchange,提问作者Yor PG
相关产品推荐
相关产品推荐

