2017-04-25 3 views
1

ここの答えと同じように、テキストファイルを追加しようとしています。私のコードは次のようになります:テキストファイルに付加すると、

if countdownTimer > 0 { 
    let dir = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).first! 
    let fileurl = dir.URLByAppendingPathComponent(fileName) 

    let date = NSDate() 
    let calendar = NSCalendar.currentCalendar() 
    let hour = calendar.component(.Hour, fromDate: date) 
    let minutes = calendar.component(.Minute, fromDate: date) 
    let seconds = calendar.component(.Second, fromDate: date) 

    newLine = "\(hour):\(minutes):\(seconds),\(someValue),\(someValue)\n" 

    let data = newLine.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! 


    if NSFileManager.defaultManager().fileExistsAtPath(fileurl!.path!) { 
     do { 
      let fileHandle = try NSFileHandle(forWritingToURL: fileurl!) 

      fileHandle.seekToEndOfFile() 
      fileHandle.writeData(data) 
      fileHandle.closeFile() 
     } catch { 
      print("Can't open fileHandle \(error)") 
     } 
    } else { 

    } 
     countdownTimer -= 1 
} 

私の実装上の違いは、私は別のイベントにファイルを作成しています(と私は、ファイルを追加する前に存在していることを確信している)とテキストファイルを追加することで、タイマーの内側にあります毎秒ループします。私は間違って何をしていますか?ありがとう。

答えて

1

私はあなたが間違っていた場所を理解するのに役立つコードを書いています。

最初に、私たちの情報をログに記録するタイプとファイル名をErrorに作成します。

let file = "logger1.txt" 

enum Throwing: Error { 
    case impossibleToWrite 
    case impossibleToRead 
} 

より2つの機能意志writeToFilereadFromFile

func writeToFile(file:String, log: String) throws { 

    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { 

     let path = dir.appendingPathComponent(file) 

     do { 
      let writer = try FileHandle(forWritingTo: path) 
      writer.seekToEndOfFile() 
      writer.write(log.data(using: String.Encoding.utf8)!) 
      writer.closeFile() 
     } 
     catch { 
      throw Throwing.impossibleToWrite 
     } 
    } 
} 

func readFromFile(file:String) throws { 

    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { 

     let path = dir.appendingPathComponent(file) 

     do { 
      let text = try String(contentsOf: path, encoding: String.Encoding.utf8) 
      print(text) 
     } 
     catch { 
      throw Throwing.impossibleToRead 
     } 
    } 
} 

日付を含むログを繰り返して作成する小さなループ。試してみる!悪い習慣ですが、テスト目的のために大丈夫です。

func logTimeInLoop() { 

    for _ in 0..<10 { 
     let formatter = DateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS " 
     let text = formatter.string(from: Date()) + "\n" 

     try! writeToFile(file: file, log: text) 
    } 

    try! readFromFile(file: file) 
} 

これはファイル内のデータの出力です。

enter image description here

+0

まずはお返事ありがとうございます。私は(構文エラーを削除するためにマイナーリビジョンで)あなたのサンプルコードを実装しようとしましたが、私はまだ同じ問題に直面しています。 – Lysdexia

+0

@Cuevas何が問題なのですか?あなたは私のコード例を実行していますか?はいの場合はすべてのデータを追加します\ –

+0

はい、私はあなたのコードを実行していますが、パッケージの内容を見て、生成されたファイルを参照すると情報はありませんでした。例えば、ここでは別の実装(私は情報を収集し、それをいくつかの変数に連結し、変数を含むログファイルを作成し、すべての情報を出力します)が本当に変ですが、この場合はそうではありません。 – Lysdexia

関連する問題