这应该是一个非常简单的修复,但由于某种原因我错过了一些东西。我想要做的就是获得我必须编写标题的字符串生成器函数,但由于某种原因它当前不是。
当我尝试将if语句更改为!File.Exists(tempFileName)时,它不会通过我的循环运行。
有什么建议吗?另外,如果您需要更多信息,请与我们联系。提前谢谢。
public static void Open(string tempFileName, string division,
int zipFiles, int conversions, int returnedFiles, int totalEmails)
{
StreamWriter dailyStats;
//This is where I am missing something
//I am passing in the original filename of a log, then adding "-Stats.log"
//so I can tell the difference between what is the new stats file, and the original log file
if (File.Exists(tempFileName))
{
dailyStats = new StreamWriter(tempFileName + "-Stats.log");
StringBuilder sb = new StringBuilder();
sb.Append("Division");
sb.Append("\t");
sb.Append("Zip Files");
sb.Append("\t");
sb.Append("Conversions");
sb.Append("\t");
sb.Append("Returned Files");
sb.Append("\t");
sb.Append("Total E-Mails");
sb.Append("\t");
}
else
{
dailyStats = File.AppendText(tempFileName + "-Stats.log");
}
if (writeLog)
{
//Use a string builder to assemble the content for performance reasons
StringBuilder s = new StringBuilder();
s.Append(division);
s.Append("\t");
s.Append(zipFiles);
s.Append("\t");
s.Append(conversions);
s.Append("\t");
s.Append(returnedFiles);
s.Append("\t");
s.Append(totalEmails);
s.Append("\t");
dailyStats.WriteLine(s.ToString());
}
dailyStats.Close();
}
答案 0 :(得分:5)
您是否错过了第一个区块中的代码?:
dailyStats.WriteLine(sb.ToString());
因此:
if (File.Exists(tempFileName))
{
dailyStats = new StreamWriter(tempFileName + "-Stats.log");
StringBuilder sb = new StringBuilder();
sb.Append("Division");
sb.Append("\t");
sb.Append("Zip Files");
sb.Append("\t");
sb.Append("Conversions");
sb.Append("\t");
sb.Append("Returned Files");
sb.Append("\t");
sb.Append("Total E-Mails");
sb.Append("\t");
// Add this ......
dailyStats.WriteLine(sb.ToString());
}
答案 1 :(得分:1)
您可以像这样修复
var sb = new StringBuilder();
string logFileName = tempFileName + "-Stats.log";
if (File.Exists(logFileName)) {
dailyStats = File.AppendText(logFileName);
} else {
dailyStats = new StreamWriter(logFileName);
// Write header
sb.Append("Division");
...
sb.AppendLine();
}
if (writeLog) {
sb.Append(division);
...
dailyStats.WriteLine(sb.ToString());
}
dailyStats.Close();
<强>更新强>
代码有不同的错误。创建了两个StringBuilders
,但只有一个写入文件。确定文件是否存在与写入的实际文件不同的文件名。最后,取决于文件存在的逻辑被反转。我完全重写并重构了代码,以使其更易于理解和管理
public static void Open(string tempFileName, string division,
int zipFiles, int conversions, int returnedFiles, int totalEmails)
{
if (!writeLog)
return;
using (StreamWriter dailyStats = OpenLogFile(tempFileName)) {
var sb = new StringBuilder();
sb.Append(division);
// ...
dailyStats.WriteLine(sb.ToString());
}
}
private static StreamWriter OpenLogFile(string tempFileName)
{
StreamWriter dailyStats;
string logFileName = tempFileName + "-Stats.log";
if (File.Exists(logFileName)) {
dailyStats = File.AppendText(logFileName);
} else {
dailyStats = new StreamWriter(logFileName);
WriteHeader(dailyStats);
}
return dailyStats;
}
private static void WriteHeader(StreamWriter dailyStats)
{
var sb = new StringBuilder();
sb.Append("Division");
// ...
dailyStats.WriteLine(sb.ToString());
}
注意:using语句会关闭文件并自动释放外部资源。
答案 2 :(得分:0)
你正在创建第二个StringBuilder
而没有做任何事情。您可能只想在更高级别定义StringBuilder
,以便在任何一个块中追加它都将其添加到一个可以在最后写出的SB。
另一个选择当然是写出用于将标题写入StringBuilder
的{{1}}的内容,而不是在附加字符串后不执行任何操作。