Read file from subfolder of application installation folder

萝らか妹 提交于 2019-12-19 11:21:38

问题


I have to read the text content from an .txt file, this file is located in app installed folder, in a subfolder, according to Microsoft docs, I am doing it like this:

 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)
        {
        }

    }

the error is:

    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()

Have to notice that if I use the file without subfolder everything is working fine.


回答1:


you can do it in other way, using URI :

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

So in your case it will be:

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



回答2:


@"\myfolder\myfile.txt"; if its a network path should be @"\\myfolder\myfile.txt"; If its a local file it needs a drive letter ie.@"c:\myfolder\myfile.txt";

However the documentation for GetFileAsync shows a file in a subfolder would be @"myfolder\myfile.txt"

When you use a filename without a subfolder it will look in the current folder.




回答3:


I think you need to use:

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

The dot in the filename represents the current folder. In you want to specify using relative paths, then @"\myfolder\myfile.txt" is not correct.




回答4:


GetFileAsync will take relative path in form folder/fileName. You can also get folder first and than file or use 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);


来源:https://stackoverflow.com/questions/35427278/read-file-from-subfolder-of-application-installation-folder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!