2016-04-13 28 views
0

Aşağıdaki kodda, ev dizinimde bulunan bir dosyaya 0.txt erişmeye çalışıyorum. Giriş dizininin yolu bir dize içinde kaydedilir ve 0.txt adı, çağrı üzerine eklenir (0, program çalışırken değerleri değiştirecek olan bir referans sayacıdır. Soru sorusu için, buna 0).Dize (contentOfFile) dosya neden olmasa bile neden başarısız olur?

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" 
    } 
} 

Bununla birlikte, bu kod bloğu çalışan her zaman, dönüş değeri failed ve hat For some reason, the file couldn't be accessed~/0.txt var olsa bile, basılır. Bu anormal davranışın neden oluştuğuna dair bir fikri olan var mı, eğer öyleyse, bu sorunu nasıl çözmeliyim?

Yan soru: try-catch bloğu tarafından oluşturulan hataları stdout'a yazdırmanın bir yolu var mı?

cevap

1

Sen dosya adına bir ayırıcı eklemeniz gerekir:

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

Not eğik çizgi dosya adının başında. defaultPath, eğik çizgi ile bitmiyor.

+0

* gasp * Sondaki eğik çizgiyi nasıl özledim ... Teşekkürler. Herhangi bir şansla, üretilen hataları nasıl yazdırabilirim? – perhapsmaybeharry

+1

Bu muhtemelen ayrı bir soru olmalı. Ama burada bir oyun alanından bir çalışma örnek: 'do { let str = NSString (contentsOfFile: "foo.bar", kodlama: NSUTF8StringEncoding) denemeye } catch hata izin olarak NSError { baskı (error.localizedDescription) } – user212514

+0

Bu bir tedavi çalıştı. Çok teşekkürler! – perhapsmaybeharry