【问题标题】:StreamWriter and StreamReader Not Working ProperlyStreamWriter 和 StreamReader 无法正常工作
【发布时间】:2017-10-20 15:04:56
【问题描述】:

几个小时以来,我一直试图理解为什么我的项目(完整的桌面应用程序)不允许我以适当的方式使用 StreamWriter 或 StreamReader。问题是,如果我尝试给 StreamWriter 或 StreamReader 一个 filePath(只是一个简单的字符串),如下所示...

private readonly string _filePath = @"...Text.txt";

public string TestMethod(string text)
{    
        // Does not accept a string as an argument, which it should based on the documentation
        StreamReader reader = new StreamReader();
        text = reader.ReadToEnd();
        reader.Close();

        return text;
}

编辑:运行上面的代码试图让所有的红线消失,这将导致这篇文章进一步发布的错误。

下面是它目前的样子(错误)

上面是它的样子(正确 - 带有路径参数)

文档:https://msdn.microsoft.com/en-us/library/f2ke0fzy(v=vs.110).aspx

...我到处都是错误,如果我尝试以另一种方式进行操作,给它其他参数,我会收到错误消息:

System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Console, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.'

我尝试创建一个全新的解决方案,它由 2 个类库组成(所以 1 个解决方案的 2 个项目,我想这样说是正确的吗?)而且它非常有效。我这样做是因为我的其他解决方案包含 3 个类库,所以我认为如果可以的话,在重现问题时保持一致是一个好主意。因此,我创建了一个简单的文本文件,用一些文本填充它,并在新解决方案的 TextBox 中将其作为屏幕输出。这基本上让我不知道现在该做什么。

有人知道是什么原因造成的吗?

【问题讨论】:

  • 这是一个什么样的项目,是完整的桌面应用还是应用商店应用或手机应用?
  • 请将您的代码和错误消息以文本形式发布,而不是屏幕截图。也就是说,您提到了“文件路径(只是一个简单的字符串)”——您能否举例说明您担心会导致 StreamReader 出现问题的字符串的复杂性?
  • 您的项目针对的是什么 .net 框架?查看项目属性。
  • 我猜你的目标框架可能不支持这个重载。你试过File.ReadAllText("path")
  • @JesseC.Slicer 哈哈..对不起,我在写代码的时候,我修改了它,当我把它粘贴到这里时忘记了。我纠正了它。感谢您的提醒。

标签: c# wpf streamreader


【解决方案1】:

很简单,您所针对的 .Net 版本(.Net Standard 1.4)中的 StreamReader 类不支持采用文件路径的构造函数。

您需要使用FileStream 类打开文件,然后使用StreamReader 读取文件。

以下是从文档中复制的示例:

https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader.-ctor?view=netstandard-1.4

using System;
using System.IO;

class Test 
{

    public static void Main() 
    {
        string path = @"c:\temp\MyTest.txt";

        try 
        {
            if (File.Exists(path)) 
            {
                File.Delete(path);
            }

            using (StreamWriter sw = new StreamWriter(path)) 
            {
                sw.WriteLine("This");
                sw.WriteLine("is some text");
                sw.WriteLine("to test");
                sw.WriteLine("Reading");
            }

            using (FileStream fs = new FileStream(path, FileMode.Open)) 
            {
                using (StreamReader sr = new StreamReader(fs)) 
                {

                    while (sr.Peek() >= 0) 
                    {
                        Console.WriteLine(sr.ReadLine());
                    }
                }
            }
        } 
        catch (Exception e) 
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}

【讨论】:

    【解决方案2】:

    根据 cmets,您当前 .NET 中的 StreamReader 没有可以采用文件路径的适当重载。您可以使用其他替代方法。您可以使用FileStream 打开您想要的文件,然后使用StreamReader 进行阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2016-12-01
      • 1970-01-01
      • 2016-08-23
      • 2017-02-17
      • 2021-08-02
      • 2013-08-01
      相关资源
      最近更新 更多