我有一个将字符串写入文件的程序。它在macos莫哈韦沙漠中非常有效,但在优胜美地中则不行。
使用Xcode 11和Swift 5
代码是(Log.swift)
import Foundation open class Log { open var maxFileSize: UInt64 = 102400 open var maxFileCount = 365 ///The directory in which the log files will be written open var directory = Log.defaultDirectory() { didSet { directory = NSString(string: directory).expandingTildeInPath let fileManager = FileManager.default if !fileManager.fileExists(atPath: directory) { do { try fileManager.createDirectory(atPath: directory, withIntermediateDirectories: true, attributes: nil) } catch { NSLog("Couldn't create directory at \(directory)") } } } } open var currentPath: String { return "\(directory)/\(logName(0))" } ///The name of the log files open var name = "logfile" ///Whether or not logging also prints to the console open var printToConsole = true ///logging singleton open class var logger: Log { struct Static { static let instance: Log = Log() } return Static.instance } //the date formatter var dateFormatter: DateFormatter { let formatter = DateFormatter() formatter.timeStyle = .medium formatter.dateStyle = .medium return formatter } ///write content to the current log file. open func write(_ text: String) { let path = currentPath let fileManager = FileManager.default if !fileManager.fileExists(atPath: path) { do { try "".write(toFile: path, atomically: true, encoding: String.Encoding.utf8) } catch _ { } } if let fileHandle = FileHandle(forWritingAtPath: path) { let dateStr = dateFormatter.string(from: Date()) let writeText = "[\(dateStr)]: \(text)\n" fileHandle.seekToEndOfFile() fileHandle.write(writeText.data(using: String.Encoding.utf8)!) fileHandle.closeFile() } } ///Recursive method call to rename log files func rename(_ index: Int) { let fileManager = FileManager.default let path = "\(directory)/\(logName(index))" let newPath = "\(directory)/\(logName(index+1))" if fileManager.fileExists(atPath: newPath) { rename(index+1) } do { try fileManager.moveItem(atPath: path, toPath: newPath) } catch _ { } } ///gets the log name func logName(_ num :Int) -> String { return "\(name)-\(num).log" } ///get the default log directory class func defaultDirectory() -> String { var path = "" let fileManager = FileManager.default let urls = fileManager.urls(for: .libraryDirectory, in: .userDomainMask) //let urls = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask) if let url = urls.last { path = "\(url.path)/TestingLog/Logs" } if !fileManager.fileExists(atPath: path) && path != "" { do { try fileManager.createDirectory(atPath: path, withIntermediateDirectories: false, attributes: nil) } catch _ { } } return path } } ///Writes content to the current log file public func logw(_ text: String) { Log.logger.write(text) }
在另一个快速文件中,我使用logw(“ test1”)将test1打印到applicationsupport目录中的文件中。
出了什么问题导致它无法用优胜美地写?
我需要它不删除文件或文件中的文本,并在写入日志时使其始终附加在文件中。
我有一个将字符串写入文件的程序。它可以完美地在macos莫哈韦沙漠中使用,但不适用于优胜美地。使用Xcode 11和Swift 5的代码是(Log.swift)import Foundation open class Log {open ...
我可以从您上面的代码中看到