【问题标题】:Reading from file in a Windows RT Application [duplicate]从 Windows RT 应用程序中的文件读取 [重复]
【发布时间】:2013-11-27 20:44:19
【问题描述】:

可能重复:
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 中这样解释时不起作用

【问题讨论】:

  • 您需要将stream 传递给StreamReader()。您正在传递filename,我只能根据错误假设是string。更多代码会有所帮助。
  • 我从您的帖子中删除了无用的代码。请尽量只发布相关信息。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • @JohnSaunders 我没有包含标签我添加了语言...
  • @TyrionLannister 我有包含文件名的代码,Dave Zych 删除了它。添加回来。

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


【解决方案1】:

您阅读的文档没有考虑到StreamReader 的许多成员在 Windows 应用商店应用中不可用这一事实。

看整体StreamReader documentation。您可以使用旁边有绿色袋子的成员。

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

【讨论】:

  • 谢谢先生。其他人都在给我废话,没有任何解释。这是一个正确的答案......他们甚至删除了我的部分代码,这迫使其他人向我询问更多代码......这是一个正确的答案。谢谢你,先生。这里的人们一直在努力变得聪明。从问题中删除内容。编辑东西。而不是简单地发布答案。顺便说一句,您的回答迫使其他人删除他们的答案:P 很棒的工作。谢谢
【解决方案2】:

这是我用于在 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);            
    }
}

【讨论】:

    【解决方案3】:
    String[] lines = File.ReadAllLines(filePath);
    

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

    【讨论】:

      【解决方案4】:

      在您在上面发布的示例中,文件名未初始化为任何内容。对于更高版本的编译器,它抱怨未分配使用文件名。在任何情况下将文件名初始化为

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

      它应该可以正确编译。

      【讨论】:

      • 这不是问题。由于在发布我的问题后 3 个不同的人开始编辑我的问题内容和标题,因此丢失了。可以接受的努力,但没有。该内容只是由于编辑而丢失了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多