非常感谢你帮助我!每个人都如此快速和优秀!再次感谢!
在测试此代码后,发生的事情是没有数据写入我的文件。只出现一个0。
我做错了什么?
void CreateHtmlFile(string myMessages[])
{
int i = 0;
int emptyarray = 0;
int myEmptyCounter = 0;
int emptyArrayCounter = 0;
string myEmpty;
ofstream myfile;
myfile.open ("C:\\Users\\Andrews\\Documents\\Visual Studio 2010\\Projects\\computerclass\\Debug\\outages.htm", ios::out);
if(!myfile) // is there any error?
{
cout << "Error opening the file! Aborting…\n";
exit(1);
}
myfile << "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n";
myfile << "<html>\n";
myfile << "<head>\n";
myfile << "<title>Livermore Readerboard</title>\n";
myfile << "<style type='text/css'>\n";
myfile << "table {font-family:Helvetica Narrow, sans-serif;font-size:42px;}\n";
myfile << "body\n";
myfile << "{\n";
myfile << "text-align: center;\n";
myfile << "background: #000000;\n";
myfile << "color:#00FF00;\n";
myfile << "}\n";
myfile << "#container\n";
myfile << "{\n";
myfile << "margin-left: auto;\n";
myfile << "margin-right: auto;\n";
myfile << "width: 93em;\n";
myfile << "text-align: left;\n";
myfile << "</style>\n";
myfile << "<META HTTP-EQUIV= \"refresh\" content= \"5;URL=readerboard.htm\">\n";
myfile << "</head>\n";
myfile << "<body>\n";
myfile << "<div id='container'>\n";
myfile << "<table class='Design6' border=1 cellpading=1 cellspacing=0>\n";
myEmpty.clear();
while (i != 10)
{
if (myMessages[i] != "")
{
myfile << "<tr>\n";
myfile << "<td><b>" << myMessages[i] << "</b></td>\n";
myfile << "</tr>\n";
i++;
}
else
{
i++;
emptyArrayCounter++;
}
}
if (emptyArrayCounter == 9)
{
//empty array so insert default message
myfile << "<tr>\n";
myfile << "<td><b>" << "No Outages" << "</b></td>\n";
myfile << "</tr>\n";
}
myfile << "</div>\n";
myfile << "</body>\n";
myfile << "</html>\n";
myfile.close();
}
答案 0 :(得分:3)
[编辑]需要明确的flush()调用是我在旧的,破碎的,预标准的编译器(如MSVC 6和十多年前的早期版本)中遇到的问题。它可能不再需要,显然是有问题的库实现的解决方法。
我已经尝试了代码(删除部分输出消息并将输出文件名重命名为我系统上的某些内容)。输出是正确的。
可能值得尝试写一个本地文件,看看会发生什么。您已经检查无法打开文件流以进行输出,但是您的案例似乎有些奇怪。
[编辑:我可能会因为多管闲事而被投票赞成但是......]你在定义范围顶部定义所有变量的C风格习惯已经过时了。考虑定义变量的时间早于它们可以正确初始化并且范围更有限的地方。它现在可能不是什么大问题,但如果您曾经在任何合理规模的C系统上工作并遇到您的第一个未初始化的变量错误,那么您将开始鄙视它。每个人都有权享受他们的个人喜好,但客观地说,一种促进错误的风格是次等的。
答案 1 :(得分:3)
尝试一些测试:
stdout
而不是文件,会发生什么?"C:\\out.htm"
?open
,myfile << "test";
,close
会怎样?答案 2 :(得分:1)
使用VS 2005,我的机器上的代码运行正常。此表达式出错:
myMessages[i] != ""
转换为
myMessages[i].empty()
哪个更好,因为你正在使用字符串库,并且方法是检查字符串是否为空,为什么不使用它。
答案 3 :(得分:-1)
要检查未打开的流,请使用:
if (myfile.bad())
其余的看起来很好,只是文件路径错误,或者无法创建文件。