搜索目录中的所有txt文件 - Swift

时间:2016-02-24 20:17:25

标签: swift file search

a。我应该如何获取目录中的所有txt文件?

我有一个目录路径,现在我应该找到所有的txt文件并稍微更改每一个。

我尝试遍历所有文件:

let fileManager = NSFileManager.defaultManager()
let enumerator:NSDirectoryEnumerator = fileManager.enumeratorAtPath(folderPath)
while let element = enumerator?.nextObject() as? String {

    }
}

但我坚持到那里。如何检查文件类型是否为文本?

b。当我到达一个目录(在我运行的目录中)时,我想进入并在那里搜索,最后到达我所在的地方并继续。< / p>

a对我来说更重要,但如果我得到b的回答也会很好。

6 个答案:

答案 0 :(得分:9)

一个。 Swift 3简单易用的解决方案:

let enumerator = FileManager.default.enumerator(atPath: folderPath)
let filePaths = enumerator?.allObjects as! [String]
let txtFilePaths = filePaths.filter{$0.contains(".txt")}
for txtFilePath in txtFilePaths{
    //Here you get each text file path present in folder
    //Perform any operation you want by using its path
}

上述代码完成了您的任务a。

在谈论b时,你不必为它编码,因为我们在这里使用的是一个枚举器,它为你提供了你给定根目录下任何目录内的文件。

因此,枚举器为您提供了进入目录并为您提供路径的工作。

答案 1 :(得分:6)

你可以在swift的语法中使用for ..来枚举NSEnumerator。

这是我编写的一个简单函数,用于提取文件夹中某些扩展名的所有文件。

func extractAllFile(atPath path: String, withExtension fileExtension:String) -> [String] {
    let pathURL = NSURL(fileURLWithPath: path, isDirectory: true)
    var allFiles: [String] = []
    let fileManager = NSFileManager.defaultManager()
    if let enumerator = fileManager.enumeratorAtPath(path) {
        for file in enumerator {
            if let path = NSURL(fileURLWithPath: file as! String, relativeToURL: pathURL).path
                where path.hasSuffix(".\(fileExtension)"){
                allFiles.append(path)
            }
        }
    }
    return allFiles
}



let folderPath = NSBundle.mainBundle().pathForResource("Files", ofType: nil)
let allTextFiles = extractAllFile(atPath: folder!, withExtension: "txt") // returns file path of all the text files inside the folder

答案 2 :(得分:5)

我需要合并多个答案才能从目录中获取图片,并且我在Swift 3中发布我的解决方案

let documentsDirectory = FileManager.default.urls(for:.documentDirectory, in: .userDomainMask)[0]
let destinationPath = documentsDirectory.appendingPathComponent("\(filename)/")

searchImages(pathURL: projectPath)

这是一个示例调用

public IContainer Configure(IAffiliate affiliate)
    {
        var builder = new ContainerBuilder();

        builder.Register(c => new ChannelRepository().Get(affiliate.Code)).As<IAffiliate>();
        builder.RegisterType<DbContext>().As<IDbContext>().InstancePerLifetimeScope();

        builder.RegisterType<OrderFactory>().As<IOrderFactory>();

        return builder.Build();
    }

答案 3 :(得分:4)

Swift 4

let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let url = URL(fileURLWithPath: documentsPath)

let fileManager = FileManager.default
let enumerator: FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: url.path)!
while let element = enumerator.nextObject() as? String, element.hasSuffix(".txt") {
    // do something

}

答案 4 :(得分:3)

let fileManager = NSFileManager.defaultManager()
let enumerator:NSDirectoryEnumerator = fileManager.enumeratorAtPath(folderPath)
while let element = enumerator?.nextObject() as? String where element.pathExtension == "txt" {
    // element is txt file
}

答案 5 :(得分:1)

let fileManager = NSFileManager.defaultManager()
let enumerator:NSDirectoryEnumerator = fileManager.enumeratorAtPath(folderPath!)!
while let element = enumerator.nextObject() as? String {
    if (element.hasSuffix(".txt")) { // element is a txt file }
}