2016-04-13 5 views
0

以下のコードでは、私のホームディレクトリにあるファイル0.txtにアクセスしようとしています。ホームディレクトリへのパスは文字列内に保存され、コール時にという名前が付加されます(0は、プログラムが実行されるときに値を変更する参照カウンタです)。 0)。ファイルが存在してもString(contentsOfFile)が失敗するのはなぜですか?

func loadfile(counter: Int) -> String {  // counter here is assumed to be "0" 
    var contents = String() 
    var defaultpath = ("~/" as NSString).stringByExpandingTildeInPath as String 
    do { 
     contents = try String(contentsOfFile: defaultpath.stringByAppendingString(String("\(counter).txt"))) 
     return contents 
    } catch { 
     print("For some reason, the file couldn't be accessed.") 
     return "failed" 
    } 
} 

しかし、このコードブロックを実行するたびには、戻り値は、failedとラインFor some reason, the file couldn't be accessed~/0.txtが存在していても、印刷されます。なぜこの異常な行動が起こっているのか誰にも考えてもらえますか?もしそうなら、どうすればこの問題を解決すべきですか?

質問:try-catchブロックによって生成されたエラーをstdoutに出力する方法はありますか?

答えて

1

あなたがファイル名に区切りを追加する必要があります。

contents = try String(contentsOfFile: defaultpath.stringByAppendingString(String("/\(counter).txt"))) 

は、ファイル名の先頭にスラッシュを注意してください。 defaultPathはスラッシュで終わっていません。

+0

* gasp *どうやってそのスラッシュが恋しいのか...ありがとう。私はどのようにして生成されたエラーも印刷することができますか? – perhapsmaybeharry

+1

それはおそらく別の質問でしょう。しかし、ここでの遊び場からの作業例を示します: '行う{ のlet STR = NSStringの(contentsOfFile: "Foo.bar"、 エンコーディング:NSUTF8StringEncoding)してみてください } キャッチがエラーを聞かせするようNSError { プリント(error.localizedDescription) } ' – user212514

+0

それは治療をしました。どうもありがとう! – perhapsmaybeharry

関連する問題