2017-01-16 6 views
0

私はシミュレータ、IOS 10.2上で実行されているスウィフト3内のファイルへのNSLogを送信しようとしています働いていないスウィフトのファイルに何も生産されていないリダイレクトのNSLogは

How to NSLog into a file

func redirectConsoleLogToDocumentFolder() { 
    let file = "file.txt" 
    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { 

     let logPath = dir.appendingPathComponent(file).absoluteString 
     print("log:\(logPath)") 
     freopen(logPath, "a+", stderr) 
    } 
    NSLog("print nslog") 
} 

出力

~/Library/Developer/CoreSimulator/Devices/A7B717-3ED8-493A-9778-C594AF9FF446/data/Containers/Data/Application/B0386-64BB-46EB-9BF2-65209FC748CD/Documents/file.txt 

唯一の効果は、出力がコンソールに出力されなくなることです。

私は受け付けており、私は何の問題のパスとファイルへの書き込みがありません

freopen(logPath.cString(using: .utf8), "a+", stderr) 

や他のさまざまな組み合わせ

を試してみましたので、

と間違って何もありません私はに期待パスにfile.txtというファイルが作成され、「print nslog」が格納されているファイルが表示されます。私は成功せずにファイルを最初に作成しようとしました。

答えて

7

URLabsoluteStringプロパティは、URL文字列を生成します。

 
    file:///path/to/file.txt 

freopen()の引数としては不適切です。 は、文字列としてファイルパスを取得する代わりにpathを使用するには:

let logFileURL = dir.appendingPathComponent(file) 
logFileURL.withUnsafeFileSystemRepresentation { 
    _ = freopen($0, "a+", stderr) 
} 

let logPath = dir.appendingPathComponent(file).path 

より良い、システムコールへのURLパスを渡すために、専用のメソッドを使用します

関連する問題