【问题标题】:Difficulty Opening Text File难以打开文本文件
【发布时间】:2014-12-11 03:59:09
【问题描述】:

我正在尝试合并一个文件浏览器,该浏览器允许用户选择一个文本文件,并将文件的内容显示在 NSTextView 中。我的文件浏览器工作正常,文本框工作,但我似乎无法打开文件并从中生成至少一个或最好是一系列字符串(每行 1 个)。

let FileWindow : NSOpenPanel = NSOpenPanel()
    FileWindow.prompt = "Open File"
    FileWindow.title = "Select a File"
    FileWindow.allowedFileTypes = ["txt"]
    FileWindow.canChooseDirectories = false
    FileWindow.allowsMultipleSelection = false
    FileWindow.runModal()
    var selectedfile = FileWindow.URL
    var output = selectedfile?.absoluteString
    var index: String.Index = advance(output!.startIndex, 7)
    FileLabel.stringValue = output!.substringFromIndex(index)

if (selectedfile != nil) {
var data: NSData = NSFileManager.defaultManager().contentsAtPath(output!.substringFromIndex(index))!
        var txt: NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!
        self.FileDisplayView.textStorage?.mutableString.appendString(txt)
        self.FileDisplayView.needsDisplay = true
    }  

任何帮助将不胜感激!

【问题讨论】:

    标签: swift text nstextview


    【解决方案1】:

    更新:Xcode 7.1 • Swift 2.1

    你应该使用 String(contentsOfFile:) 或 String(contentsOfURL:)

    创建这个类来处理打开的文本文件:

    public class File {
    
        class func open(path: String, encoding: NSStringEncoding = NSUTF8StringEncoding) -> String? {
            guard  NSFileManager().fileExistsAtPath(path) else { return nil }
            do {
                return try String(contentsOfFile: path, encoding: encoding)
            } catch let error as NSError {
                print(error.localizedDescription)
                return nil
            }
        }
        class func save(path: String, fileContent: String, encoding: NSStringEncoding = NSUTF8StringEncoding) -> Bool {
            do {
                try fileContent.writeToFile(path, atomically: true, encoding: encoding)
                return true
            } catch let error as NSError {
                print(error.localizedDescription)
                return false
            }
        }
    }
    
    class Url {
        class func read(urL: NSURL, encoding: NSStringEncoding = NSUTF8StringEncoding) -> String? {
            do {
                return try String(contentsOfURL: urL, encoding: encoding)
            } catch let error as NSError {
                print(error.localizedDescription)
                return nil
            }
        }
        class func write(urL: NSURL, fileContent: String, encoding: NSStringEncoding = NSUTF8StringEncoding) -> Bool {
            do {
                try fileContent.writeToURL(urL, atomically: true, encoding: encoding)
                return true
            } catch let error as NSError {
                print(error.localizedDescription)
                return false
            }
        }
    
    }
    

    用法如下:

    if let loadedString = File.open("\(NSHomeDirectory())/Desktop/file.txt") {
        println(loadedString)
    } else {
        println("error reading file")
    }  
    

    或打开您的网址:

    if let loadedString = Url.read(yourUrl) {
        println(loadedString)
    } else {
        println("error reading file")
    }  
    

    【讨论】:

    • 你不应该使用 NSString。只需使用 String 代替。
    • 非常感谢您提供的所有信息!我现在只需要阅读该文件,所以我刚刚实现了那个文件,但它现在工作得很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2016-09-14
    • 2017-10-26
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多