C# 如何在windows universal app中读取文本文件

C# 如何在windows universal app中读取文本文件,c#,windows-10-universal,windows-10-mobile,C#,Windows 10 Universal,Windows 10 Mobile,我正在尝试读取一个名为data.txt的文本文件,其中有一个我想在刽子手游戏中使用的单词列表。我尝试过不同的方法,但我不知道文件放在哪里,如果在应用程序运行时。我将该文件添加到我的项目中,并尝试将构建属性设置为content,然后设置为embedded resource,但找不到该文件。我制作了一个Windows10通用应用程序项目。我尝试的代码如下所示: Stream stream = this.GetType().GetTypeInfo().Assembly.GetManifestRes

我正在尝试读取一个名为data.txt的文本文件,其中有一个我想在刽子手游戏中使用的单词列表。我尝试过不同的方法,但我不知道文件放在哪里,如果在应用程序运行时。我将该文件添加到我的项目中,并尝试将构建属性设置为content,然后设置为embedded resource,但找不到该文件。我制作了一个Windows10通用应用程序项目。我尝试的代码如下所示:

  Stream stream = this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream("thedata.txt");
            using (StreamReader inputStream = new StreamReader(stream))
            {
                while (inputStream.Peek() >= 0)
                {
                    Debug.WriteLine("the line is ", inputStream.ReadLine());
                }
            }
using Windows.Storage;

StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appdata:///local/file.txt");  
我有例外。 我还尝试列出另一个目录中的文件:

 string path = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
            Debug.WriteLine("The path is " + path);
            IReadOnlyCollection<StorageFile> files = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFilesAsync();
            foreach (StorageFile file2 in files)
            {
                Debug.WriteLine("Name 2 is " + file2.Name + ", " + file2.DateCreated);
            }
string path=Windows.Storage.ApplicationData.Current.LocalFolder.path;
Debug.WriteLine(“路径为”+path);
IReadOnlyCollection files=等待Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync();
foreach(文件中的StorageFile文件2)
{
Debug.WriteLine(“名称2是“+file2.Name+”,“+file2.DateCreated”);
}

我也看不到那里的文件…我想避免在我的程序中硬编码名字列表。我不确定文件放置的路径。

在Windows运行时应用程序中不能使用经典的.NET IO方法,在UWP中读取文本文件的正确方法是:

var file = await ApplicationData.Current.LocalFolder.GetFileAsync("data.txt");
var lines = await FileIO.ReadLinesAsync(file);
此外,您不需要文件夹的物理路径-从:

不要依赖此属性访问文件夹,因为文件系统 某些文件夹的路径不可用。例如,在下面的 在这种情况下,文件夹可能没有文件系统路径或文件系统 路径可能不可用。•该文件夹表示一个文件夹的容器 一组文件(例如,文件的某些重载的返回值) GetFoldersAsync方法),而不是文件中的实际文件夹 系统.•文件夹由URI支持。•该文件夹是由 使用文件选择器

有关更多详细信息,请参阅。 并提供了与Windows 10上UWP应用程序的文件IO相关的示例

您可以使用应用URI直接从应用的本地文件夹检索文件,如下所示:

  Stream stream = this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream("thedata.txt");
            using (StreamReader inputStream = new StreamReader(stream))
            {
                while (inputStream.Peek() >= 0)
                {
                    Debug.WriteLine("the line is ", inputStream.ReadLine());
                }
            }
using Windows.Storage;

StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appdata:///local/file.txt");  

代码非常简单,您只需使用有效的scheme URI(在您的示例中是ms appx)并将WinRT InputStream转换为经典的.NET流:

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///thedata.txt"));
using (var inputStream = await file.OpenReadAsync())
using (var classicStream = inputStream.AsStreamForRead())
using (var streamReader = new StreamReader(classicStream))
{
    while (streamReader.Peek() >= 0)
    {
        Debug.WriteLine(string.Format("the line is {0}", streamReader.ReadLine()));
    }
}

对于嵌入文件的属性,“构建操作”必须设置为“内容”,而“复制到输出目录”应设置为“不复制”。

t.ouvre提供的上述代码回答了我的问题。我已经验证了它在我的计算机和模拟器上工作。谢谢你回答我的问题。很有魅力。谢谢