Как я могу проверить поток перед его инициализацией в цикле в C # - PullRequest
0 голосов
/ 17 июля 2011

У меня есть следующий фрагмент кода, который генерирует список, который я пытаюсь обработать.Мне нужно создать несколько файлов по мере прохождения списка.

В настоящее время я получаю следующую ошибку при вызовах genStream вне IF, (в и из цикла FOREACH), и я 'Я не уверен, почему:

The name genStream' does not exist in the current context

Я пытаюсь выяснить, как я могу закрыть один поток и открыть другой в выражении 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, и у него есть неприятный "водяной знак", и дроссели на файлы более пары МБ (у меня 5-10 МБ +).У меня есть WkHTMLToSharp, но я не уверен, как его использовать, и не могу найти никакой документации о том, как его инициализировать / использовать.

Спасибо, как всегда!

1 Ответ

2 голосов
/ 17 июля 2011

Объявите genStream вне цикла foreach, а затем инициализируйте его при необходимости в операторе 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...