我的项目中有这个方法。这是应该做的:
它接受一个字符串,它是我项目的Assets文件夹中文件夹AV文件的名称。它打开此文件并对其执行一些操作(并非所有必需的操作都在代码中)。
public async static Task<Book> ParseFile(string bookN)
{
string bookName = bookN.Replace(" ", "");
StorageFile bookFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/AV/" + bookName + ".txt"));
string content = await FileIO.ReadTextAsync(bookFile);
string chapterStr = "CHAPTER";
int numOfChapters = Utilities.NumOfTimesStringOccurs(content, chapterStr);
Book book = new Book(bookName, numOfChapters);
//book.Chapters = new List<Chapter>(numOfChapters);
return book;
}
问题在于这一行:
string content = await FileIO.ReadTextAsync(bookFile);
我知道这是因为我在方法的第一行设置了一个断点。进入代码后,该特定行打破并打开.g.cs
文件,并突出显示一条显然暗示编译器无法跟踪它的行。这条线与diagnostics.debugger
或类似的东西有关。
我尝试的下一步是放入try
并在MessageDialog
中显示错误。这个错误是:
Object reference was not found
或类似的东西。
我在想这可能就是
行 StorageFile bookFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/AV/" + bookName + ".txt"));
导致了这个问题,因为它有await
因此可能在下一行执行之前操作未完成。但我不希望它变慢,因为文件夹中的文件平均只有5到6 kB。
我不知道这是什么错,因为这是我第一次使用Storage
命名空间类,因为我是Windows Store编程的新手。
修改
完成此MSDN Forum后,我将代码更改为:
StorageFile bookFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/AV/" + bookName + ".txt"));
Windows.Storage.Streams.IRandomAccessStream ras = await bookFile.OpenReadAsync();
Windows.Storage.Streams.DataReader reader = new Windows.Storage.Streams.DataReader(ras.GetInputStreamAt(0));
int numOfBytes = (int)ras.Size;
Byte[] bytes = new Byte[numOfBytes - 1];
await reader.LoadAsync((uint)numOfBytes);
reader.ReadBytes(bytes);
string content = Convert.ToBase64String(bytes);
此代码实际上应该有效,因为当我在断点期间逐步执行它时,没有错误。但由于某种原因,我无法理解,该应用程序无法做出反应。当我设置一个断点并且我进入代码时,它可以工作(我的意思是它不会中断;它不会给我预期的输出)但是当没有时,它就会冻结&#34;。
我最初认为文件的大小(201 kB)花了太长时间,所以我把它改成了另一个尺寸小得多(~3 kb),但它是一样的。现在我认为它与async
和await
有关。我希望有一种方法可以不使用它们。
编辑:
我没有发布这个答案,因为我意识到它解决了问题,但问题并没有包含足够的信息来得到答案。
解决方案是我没有在调用此方法的方法上使用await
。我会删除它但我想也许它可以帮助某人。感谢所有试图解决它的人。
答案 0 :(得分:0)
首先,您可以检查文件(Assets/AV/someone.txt)
的属性。
构建操作 应为 内容 。但不是嵌入式资源或其他。
如果还是错误的话。然后检查 文件是否存在 。