2016-02-16 2 views
1

я должен прочитать текст содержимого из .txt файла, этот файл находится в приложении установлен папку, в папке, в соответствии с Microsoft docs, я делаю это так:Прочитайте файл из вложенной папки установки приложения

private async void readMyFile() 
    { 
     // Get the app's installation folder. 
     StorageFolder appFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; 

     // Get a file from a subfolder of the current folder by providing a relative path. 
     string txtFileName = @"\myfolder\myfile.txt"; 

     try 
     { 
      //here my file exists and I get file path 
      StorageFile txtfile = await appFolder.GetFileAsync(txtFileName); 
      Debug.WriteLine("ok file found: " + txtfile.Path); 

      //here I get the error 
      string text = await FileIO.ReadTextAsync(txtfile); 
      Debug.WriteLine("Txt is: " + text); 
     } 
     catch (FileNotFoundException ex) 
     { 
     } 

    } 

ошибка:

Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.ni.dll 
exception file not found: System.IO.FileNotFoundException: The filename, directory name, or volume label syntax is incorrect. (Exception from HRESULT: 0x8007007B) 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at Smadshop.MainPage.<testExistsFile>d__8.MoveNext() 

Должен заметить, что, если я использую файл без подпапок все работает нормально.

ответ

4

вы можете сделать это по-другому, используя URI:

using Windows.Storage; 
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appx:///file.txt"); 

Так что в вашем случае это будет:

StorageFile txtfile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///myfolder/myfile.txt")); 
+1

it good, thx –

1

@"\myfolder\myfile.txt"; если его сетевой путь должен быть @"\\myfolder\myfile.txt"; Если его местному файлу требуется буква диска, т.е. @"c:\myfolder\myfile.txt";

Однако документация GetFileAsync показывает файл в папке будет @"myfolder\myfile.txt"

При использовании файла без вложенного это будет выглядеть в текущей папке.

+0

та же ошибка с использованием '@" c: \ myfolder \ myfile.txt "' –

+2

@VasileDoe Документация для 'GetFileAsync' показывает файл в подпапке, будет' @ "myfolder \ myfile.txt" ' – Fred

+0

yep, вот и все - я изменю ваш ответ как правильный, если вы отредактируете его в соответствии с этим комментарием. –

0

Я думаю, вам нужно использовать:

string txtFileName = @".\myfolder\myfile.txt"; 

Точка в имени файла представляет текущую папку. Если вы хотите указать использование относительных путей, то неверно @"\myfolder\myfile.txt".

+0

Nitpick: '@" \ myfolder \ myfile.txt "' тоже относительный путь, только от корня устройства ... Может работать на рабочем столе .Net (не UWP как вероятный в случае с OP) приложениях при поиске из корня текущий привод. –

+0

нормально, может быть, это неправильно, но я могу получить файл с помощью 'StorageFile txtfile = await appFolder.GetFileAsync (txtFileName);' но ваше решение говорит мне: «Исключение типа« System.ArgumentException »произошло в mscorlib.ni.dll но не обрабатывался в коде пользователя Информация WinRT: элемент не может быть найден с указанным именем (. \ myfolder \ myfile.txt). Дополнительная информация: Неверный параметр –

0

GetFileAsync займет относительный путь в форме folder/fileName. Вы также можете получить папку первой и чем файл или использовать GetItemAsync

StorageFolder appFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
// Get a file from a subfolder of the current folder 
// by providing a relative path. 
string image = @"Assets\Logo.scale-100.png"; 
var logoImage = await appFolder.GetFileAsync(image); 
Смежные вопросы