从Windows RT应用程序中的文件读取

时间:2013-01-04 20:55:55

标签: c# windows-8 microsoft-metro windows-runtime windows-store-apps

  

可能重复:
  How to read a text file line by line Windows RT?

我试图在C#中逐行读取文件。

这是我的代码

   String filename = "apoel.txt";

   System.IO.StreamReader file = new System.IO.StreamReader(filename);

我按照MSDN page的说明操作,然后完全按照说明操作。问题是我不断收到错误

  

System.IO.StreamReader.StreamReader(System.IO.Stream)的最佳重载方法匹配'有一些   无效的论点
  参数1:无法从'string'转换为'System.IO.Stream'

我添加了using System.IO;在我的代码顶部

我做错了什么?如果它有任何帮助,这是一个Windows Metro应用程序

也可以有人向我解释为什么我发布的MSDN上的文章是错的而且不起作用?请不要给我一个替代品。请告诉我为什么我的代码在MSDN

中的解释时无效

4 个答案:

答案 0 :(得分:13)

您正在阅读未考虑StreamReader的许多成员在Windows应用商店应用中不可用的文档。

查看整体StreamReader documentation。您只能 使用旁边有绿色包的成员。

Windows应用商店应用中的文件访问与完整桌面.NET略有不同。我建议你阅读MSDN guide。获得Stream后,您可以构建StreamReader - 或者您可以使用Windows.Storage.FileIO的成员,例如ReadLinesAsync,具体取决于您尝试的内容做。

答案 1 :(得分:4)

这是我用于在Windows 8中读取/写入文件的代码。它可以工作,我希望它也可以帮助你。

private StorageFolder localFolder;
// Read from a file line by line
public async Task ReadFile()
{
    try
    {
        // get the file
        StorageFile myStorageFile = await localFolder.GetFileAsync("MyDocument.txt");
        var readThis = await FileIO.ReadLinesAsync(myStorageFile);
        foreach (var line in readThis)
        {
            String myStringLine = line;
        }
        Debug.WriteLine("File read successfully.");
    }
    catch(FileNotFoundException ex)
    {   
        Debug.WriteLine(ex);           
    }
}
// Write to a file line by line
public async void SaveFile()
{
    try
    {
        // set storage file
        StorageFile myStorageFile = await localFolder.CreateFileAsync("MyDocument.txt", CreationCollisionOption.ReplaceExisting);
        List<String> myDataLineList = new List<string>();
        await FileIO.WriteLinesAsync(myStorageFile, myDataLineList);
        Debug.WriteLine("File saved successfully.");
    }
    catch(FileNotFoundException ex)
    {  
        Debug.WriteLine(ex);            
    }
}

答案 2 :(得分:2)

在上面发布的文件中,文件名未初始化为任何内容。对于更高版本的编译器,它抱怨未使用的filename文件。无论如何将文件名初始化为

string filename = @"c:\somefile.txt";

它应该正确编译。

答案 3 :(得分:2)

String[] lines = File.ReadAllLines(filePath);

List<string> lines = new List<string>(File.ReadAllLines(filePath));