从应用程序安装文件夹的子文件夹中读取文件

本文关键字:文件夹 读取 文件 应用程序 安装 | 更新日期: 2023-09-27 18:34:49

我必须从.txt文件中读取文本内容,该文件位于应用程序安装的文件夹中,在子文件夹中,根据Microsoft文档,我是这样做的:

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

必须注意,如果我使用没有子文件夹的文件,一切正常。

从应用程序安装文件夹的子文件夹中读取文件

你可以用其他方式做到这一点,使用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"));

我认为您需要使用:

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

文件名中的点表示当前文件夹。如果要使用相对路径指定,则@"'myfolder'myfile.txt"不正确。

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);
@"'myfolder'myfile.txt";如果是

网络路径,则应@"''myfolder'myfile.txt"; 如果是本地文件,则需要驱动器号,即。@"c:'myfolder'myfile.txt";

但是,GetFileAsync 的文档显示子文件夹中的文件将被@"myfolder'myfile.txt"

当您使用不带子文件夹的文件名时,它将在当前文件夹中查找。