C# “如何修复StreamWriter错误”;无法将类型字符串隐式转换为System.IO.StreamWriter“;
我在Visual Studio 2017社区中使用C# 我有一个工作,全功能的程序,我正试图优化。简而言之,程序从文本文件中读取文本和数字,进行一些数学运算和重新格式化,然后输出到新的文本文件 我试图优化的部分是将文本行写入输出文件的方式。以下是有效的方法: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
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);
}