2011-07-17 6 views
0

処理しようとしているリストを生成する次のコードがあります。私はリストを通って複数のファイルを作成する必要があります。C#のループで初期化する前にストリームをチェックするにはどうすればいいですか?

現在、私は(中とforeachループの外に)、IFの外genStreamへの呼び出しに次のエラーを取得しています、と私はなぜわからない:

The name genStream' does not exist in the current context 

アイムどのように私は1つのストリームを閉じることができます把握しようと、別のIFステートメントで開きます。私は、新しいストリームを作成する前に.close()を入れようとしましたが、ストリームを初期化する前に、そのストリームを使用する際にエラーが発生しました。

/// <summary> 
    /// Creates a file for each Genre, and writes movie info to each for the cooresponding movies 
    /// </summary> 
    /// <param name="cPath">Path to create HTML files in</param> 
    /// <param name="mList">List of Movies to generate Genre and Movie info from</param> 
    public static void WriteGenreHTML(string cPath, List<Movie> mList) 
    { 
     int lineID = 0; 
     string tmpGen = null; 
     string strHeader, strMovie, strGenre, tmpGenre = null; 

     // Gets a list of unique Genres from the MovieList 
     var distinctGenres = from m in mList 
          from genre in m.Genres 
          group genre by genre into genres 
          select genres.First(); 

     // Gets a list of Movies with the associated Genres 
     var moviesWithGenre = from g in distinctGenres 
           from m in mList 
           where m.Genres.Contains(g) 
           orderby g, m.Title 
           select new { Genre = g, Movie = m }; 

     // Traverses list of movies creating new HTML Genre files, and writing movie info to the HTML genre files 
     foreach (var m in moviesWithGenre) 
     { 
      // Creates new HTML file if new Genre is detected 
      if (m.Genre != tmpGen) 
      { 
       tmpGen = m.Genre; 

       // initiates streamwriter for catalog output file 
       FileStream fs = new FileStream(cPath + Path.DirectorySeparatorChar + m.Genre, FileMode.Create); 
       StreamWriter genStream = new StreamWriter(fs); 

       // Generates header info for new file, and new Genre 
       strHeader = "<style type=\"text/css\">\r\n" + "<!--\r\n" + "tr#odd {\r\n" + " background-color:#e2e2e2;\r\n" + " vertical-align:top;\r\n" + "}\r\n" + "\r\n" + "tr#even {\r\n" + " vertical-align:top;\r\n" + "}\r\n" + "div#title {\r\n" + " font-size:16px;\r\n" + " font-weight:bold;\r\n" + "}\r\n" + "\r\n" + "div#mpaa {\r\n" + " font-size:10px;\r\n" + "}\r\n" + "\r\n" + "div#genre {\r\n" + " font-size:12px;\r\n" + " font-style:italic;\r\n" + "}\r\n" + "\r\n" + "div#plot {\r\n" + " height: 63px;\r\n" + " font-size:12px;\r\n" + " overflow:hidden;\r\n" + "}\r\n" + "\r\n" + "div#genre_heading {\r\n" + " height: 50px;\r\n" + " font-size: 24px;\r\n" + " font-weight: bold;\r\n" + " text-align: center;\r\n" + " text-decoration: underline;\r\n" + "}\r\n" + "-->\r\n" + "</style>\r\n" + "\r\n" + "<html>\r\n" + " <body>\r\n" + "  <table>\r\n"; 
       strHeader += "   <tr>\r\n" + "    <td colspan=2>\r\n" + "     <div id=\"genre_heading\">" + m.Genre + "</div>\r\n" + "    </td>\r\n" + "   </tr>\r\n" + "\r\n"; 

       // Writes header HTML to stream 
       genStream.WriteLine(strHeader); 

       Console.WriteLine(); 
       Console.WriteLine("Now Processing " + m.Genre); 
      } 

      // Generates the HTML for the Movie 
      strMovie = lineID == 0 ? "   <tr id=\"odd\" style=\"page-break-inside:avoid\">\r\n" : "   <tr id=\"even\" style=\"page-break-inside:avoid\">\r\n"; 
      strMovie += "    <td>\r\n" + "     <img src=\".\\images\\" + m.Movie.ImageFile + "\" width=\"75\" height=\"110\">\r\n" + "    </td>\r\n" + "    <td>\r\n" + "     <div id=\"title\">" + m.Movie.Title + "</div>\r\n" + "     <div id=\"mpaa\">" + m.Movie.Certification + " " + m.Movie.MPAA + "</div>\r\n" + "     <div id=\"genre\">" + strGenre + "</div>\r\n" + "     <div id=\"plot\">" + m.Movie.Plot + "</div>\r\n" + "    </td>\r\n" + "   </tr>\r\n"; 

      // Writes the HTML to the stream 
      genStream.WriteLine(strMovie); 
      lineID = lineID == 0 ? 1 : 0; 
     } 

     string closingHTML = "  </table>\r\n" + " </body>\r\n" + "</html>"; 
     genStream.WriteLine(closingHTML); 
     genStream.Close(); 
    } 

サイドノート:

は、ここでは、コードの私のビットです。誰かが私がHTMLファイルをPDFに変換するのに使うことができるものを指し示すことができたら、私は大いに感謝します。私はEOを試してみました。そして、それは厄介な "ウォーターマーク"を持っていて、カップルのMB(私は5〜10MB +です)以上のファイルでチョークします。私はWkHTMLToSharpを持っていますが、使用方法はわかりませんし、初期化/使用方法に関するドキュメントは見つかりません。

いつものように!

答えて

2

foreachループの外でgenStreamを宣言して、if文の中に、必要に応じてそれを初期化:

StreamWriter genStream; 

foreach (var m in moviesWithGenre) 
{ 
    // Creates new HTML file if new Genre is detected 
    if (m.Genre != tmpGen) 
    { 
     tmpGen = m.Genre; 

     // initiates streamwriter for catalog output file 
     FileStream fs = new FileStream(cPath + Path.DirectorySeparatorChar + m.Genre, FileMode.Create); 
     // Set genStream to the FileStream 
     genStream = new StreamWriter(fs); 
+0

うわー、それは総DUHの瞬間です!ありがとうございました! – Dizzy49

+0

HTML-> PDF、またはWkHTMLToSharpについてのご意見はありますか? – Dizzy49

+0

私はPDFを生成するために使用した唯一のライブラリはActivePDFToolkitです。これは、XML Webサービス経由で第三者からのデータに基づいてドキュメントを生成することでした。特に、HTML-> PDFまたはWkHTMLToSharpに関連する新しい質問を投稿することができます。 – Tim