Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “如何修复StreamWriter错误”;无法将类型字符串隐式转换为System.IO.StreamWriter“;_C#_Streamwriter - Fatal编程技术网

C# “如何修复StreamWriter错误”;无法将类型字符串隐式转换为System.IO.StreamWriter“;

C# “如何修复StreamWriter错误”;无法将类型字符串隐式转换为System.IO.StreamWriter“;,c#,streamwriter,C#,Streamwriter,我在Visual Studio 2017社区中使用C# 我有一个工作,全功能的程序,我正试图优化。简而言之,程序从文本文件中读取文本和数字,进行一些数学运算和重新格式化,然后输出到新的文本文件 我试图优化的部分是将文本行写入输出文件的方式。以下是有效的方法: using System.IO // Let's start building the MA output text file now. // Designate an output file --- put it in same dir

我在Visual Studio 2017社区中使用C#

我有一个工作,全功能的程序,我正试图优化。简而言之,程序从文本文件中读取文本和数字,进行一些数学运算和重新格式化,然后输出到新的文本文件

我试图优化的部分是将文本行写入输出文件的方式。以下是有效的方法:

using System.IO

// Let's start building the MA output text file now.
// Designate an output file --- put it in same directory as original files
// give MA file ame name as the original file -- but different extension.

maOutFile = dir + "\\" + serialNumber[f] + ".ma";

//Create MA header lines and write to file.

string maHeaderLine1 = "TITLE: S/N:" + serialNumber[f] + "\n";
string maHeaderLine2 = "ENGLISH(IN)/METRIC(MM) INDICATOR :IN-P\n";

// Open up the file for writing
File.WriteAllText(maOutFile, maHeaderLine1);
File.AppendAllText(maOutFile, maHeaderLine2);

上面的代码运行良好。我担心的是它的效率不是很高,尤其是在速度较慢的网络上。每次写入文件时,它都会打开和关闭该文件

所以,为了让它运行得更快,我想我应该试试StreamWriter

我的StreamWriter代码如下所示:


// Designate an output file --- put it in same directory as the original files
// give MA file same name as the original file -- with different extension.

// maOutFile = dir + "\\" + serialNumber[f] + ".ma";

StreamWriter outfile;
outfile = dir + "\\" + serialNumber[f] + ".ma";

//Create MA header lines and write to file.

string maHeaderLine1 = "TITLE: S/N:" + serialNumber[f] + "\n";
string maHeaderLine2 = "ENGLISH(IN)/METRIC(MM) INDICATOR :IN-P\n";

// Open up the file for writing
//File.WriteAllText(maOutFile, maHeaderLine1);
//File.AppendAllText(maOutFile, maHeaderLine2);
outfile.WriteLine(maHeaderLine1);
outfile.WriteLine(maHeaderLine2);

Visual Studio不喜欢我使用StreamWriter的新代码。它在“outfile=dir+“\”+serialNumber[f]+“.ma”行等号右侧的所有内容下都放置了一条红线

当我将鼠标悬停在红线代码上时,消息是“无法将类型字符串隐式转换为System.IO.StreamWriter”


我的新代码不喜欢什么?

您正在为StreamWriter对象分配字符串变量,而不是创建StreamWriter对象

试试下面的方法

using (StreamWriter sw = new StreamWriter(dir + "\\" + serialNumber[f] + ".ma"))
{
string maHeaderLine1 = "TITLE: S/N:" + serialNumber[f] + "\n";
string maHeaderLine2 = "ENGLISH(IN)/METRIC(MM) INDICATOR :IN-P\n";

// Open up the file for writing
//File.WriteAllText(maOutFile, maHeaderLine1);

sw.WriteLine(maHeaderLine1);
sw.WriteLine(maHeaderLine2);
}

您试图在此处为StreamWriter分配字符串:

outfile = dir + "\\" + serialNumber[f] + ".ma";
查看您试图以流形式打开文件的代码,大致如下:

string outFileDir = dir + "\\" + serialNumber[f] + ".ma";
StreamWriter outFile = new StreamWriter(outFileDir);

}

错误在哪里?哇!在我编辑完问题之前,你就回答了我的问题。我现在就来试试。谢谢。效果很好!谢谢!即使在我的家用电脑上,我也可以看到这要快得多。在我的家中测试中,处理一个满是文件的目录大约需要3到4秒。现在几乎是即时的aneous。我将在工作中尝试,看看是否有类似的改进。后续问题:当我第一次尝试实施此修复程序时,我在完成写入时忘记关闭输出文件。但软件似乎会自动关闭。我刚才在末尾放了一个关闭语句--sw.close()--它的工作方式似乎是一样的。它是自动关闭每个文件吗?还是它们仍然以某种方式“打开”?使用
确保在其作用域完成执行后(在
sw.WriteLine(maHeaderLine2)
完成清理/关闭)我只是想让你知道,你的解决方案在我的乌龟般的网络上发挥了巨大的作用。我现在是StreamWriter的拥护者。再次非常感谢你!哦,在实施你的修复时,我还自嘲了一番。当我第一次将你的代码放入我的程序时,我保留了“原样”的文本行“--其中包括换行符”\n”。所以当我第一次运行它时,对于我输出的每一行文本,我也输出一个空行。
 string fileName = dir + "\\" + serialNumber[f] + ".ma" ;  
try  
   {  
   using (StreamWriter writer = new StreamWriter(fileName))  
      {  
        string maHeaderLine1 = "TITLE: S/N:" + serialNumber[f] + "\n";
        string maHeaderLine2 = "ENGLISH(IN)/METRIC(MM) INDICATOR :IN-P\n";
        writer.Write(maHeaderLine1 + maHeaderLine2);  
      }  
   }  
catch(Exception exp)  
   {  
      Console.Write(exp.Message);  
   }