我正在尝试阅读一个名为thedata.txt的文本文件,其中包含我想在刽子手游戏中使用的单词列表。我尝试了不同的方法,但我无法确定文件的放置位置,如果应用程序运行的话。我将文件添加到我的项目中,我尝试将构建属性设置为内容,然后设置嵌入资源,但无法找到该文件。我制作了一个Windows 10通用应用程序项目。我试过的代码看起来像这样:
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());
}
}
我得到例外。 我还试图将文件列在另一个目录中:
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);
}
我在那里看不到文件......我想避免在我的程序中硬编码名单。我不确定该文件的路径是什么。
答案 0 :(得分:19)
代码非常简单,您只需使用有效的方案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()));
}
}
对于嵌入文件的属性,&#34; Build Action&#34;必须设置为&#34;内容&#34;和&#34;复制到输出目录&#34;应设置为&#34;不要复制&#34;。
答案 1 :(得分:7)
您不能在Windows运行时应用程序中使用经典的.NET IO方法,在UWP中读取文本文件的正确方法是:
var file = await ApplicationData.Current.LocalFolder.GetFileAsync("data.txt");
var lines = await FileIO.ReadLinesAsync(file);
此外,您不需要文件夹的物理路径 - 来自msdn:
不要依赖此属性来访问文件夹,因为文件系统 路径不适用于某些文件夹。例如,在下面 例如,文件夹可能没有文件系统路径或文件系统 路径可能无法使用。 •该文件夹代表a的容器 一组文件(例如,来自某些重载的返回值) GetFoldersAsync方法)而不是文件中的实际文件夹 系统。 •文件夹由URI支持。 •文件夹被选中 使用文件选择器。
答案 2 :(得分:3)
有关详细信息,请参阅Create, write, and read a file。 {{3}}提供了与Windows 10上的UWP应用程序的文件IO相关的示例。
您可以使用应用URI直接从应用的本地文件夹中检索文件,如下所示:
next()