0

Я использую xamrin.forms, и я пытаюсь получить доступ к файлу и прочитать его.Как исправить Xamarin.forms System.IO.FileNotFoundException: Не удалось найти файл

Я lastusername.txt как текстовый файл, и я установить действие сборки для него как «Материалы», на самом деле я пытаюсь прочитать файл как следующее:

var filename = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "lastusername.txt"); 
    if (filename != null) 
      return System.IO.File.ReadAllText(filename);//error occurred here 
    else 
      return ""; 

Я получаю следующую ошибку:

System.IO.FileNotFoundException: Could not find file

+1

Возможно, вы захотите дважды проверить, что происходит с файлами, которые вы добавляете при создании. Я не думаю, что они будут помещены в папку, к которой вы пытаетесь получить доступ, здесь –

+0

правильно .. так что я думаю, мне нужно изменить эту среду.SpecialFolder.Personal, я ищу, о какой из них относится к файлам в моем проекте? ! –

ответ

1

Поместите файл в Assets папку Android и назначить его с типом сборки «AndroidAsset».

Поскольку активы вашего приложения только для чтения, вы можете прочитать его через AssetManager, сохранение (копия) это где-то еще, если он не существует (то есть в первый раз, приложение запускается):

var fileName = "MyAssetBasedFile.txt"; 
if (!File.Exists(Path.Combine(CacheDir.Path, fileName))) 
{ 
    AssetManager assets = this.Assets; 
    using (StreamReader sr = new StreamReader(assets.Open(fileName))) 
    using (StreamWriter sw = new StreamWriter(Path.Combine(CacheDir.Path, fileName), append: false)) 
     sw.Write(sr.ReadToEnd()); 
} 
string content; 
using (StreamReader sr = new StreamReader(Path.Combine(CacheDir.Path, fileName))) 
{ 
    content = sr.ReadToEnd(); 
} 
Log.Debug("SO", content); 

В следующий раз, когда приложение запустится, вы заберете тот, который находится в вашем кеше.

+0

На самом деле, мне нужен файл для чтения и записи? –

+1

@MohamadMahmoud Ваш комплект приложений READ-ONLY. Вам нужно будет проверить, существует ли он в вашем кеш-каталоге (или там, где вы его ожидаете), если он там не существует, прочитайте его из своих активов приложения и напишите в нем свой каталог кеша. В следующем запуске приложения вы найдете обновленную версию и, таким образом, не «скопируете» исходную информацию из «Активы». – SushiHangover

+0

хорошая идея, не могли бы вы обновить свой ответ и добавить некоторую справочную строку кода. Спасибо –

Смежные вопросы