Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Счетчик в консоле, передача параметра из функции


Автор: Xeim 24.9.2008, 19:29
Привет всем!
1) Верным ли путем я реализовал имитацию счетчика в консоли? Так принято?
2) Как добиться того, чтобы после изменения i в функции, в программе i тоже обновилась?
Код

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// Написать программу, выводящую в текстовый файл список всех файлов из всех папок на диске C
namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 1;
            DirectoryInfo di = new DirectoryInfo("c:\\");
            Console.WriteLine("Запишем в файл информацию о файлах в папках в корне диска.");
            Console.Write("Нажмите <Ввод> для продолжения.");
            Console.ReadKey();
            Console.WriteLine("Пожалуйста подождите...        ");
            Dump(di,i); // Это до-о-о-олго          
            Console.Write("Файл готов. Нажмите <Ввод> для выхода.");
            Console.ReadKey();
        }
        public static void Dump(DirectoryInfo di, int i)
        {
            foreach (DirectoryInfo di2 in di.GetDirectories())
            {
                foreach (FileInfo fi in di2.GetFiles())
                {
                    StreamWriter sw = null;
                    string sFileName = "log.txt";
                    FileStream fs = File.Open(sFileName, FileMode.Append, FileAccess.Write);
                    sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
                    sw.WriteLine(fi.FullName);
                    sw.Close();
                    sw = null;
                    Dump(di2,i);
                }
                Console.Write("Счетчик-чик-чик {0}",i);
                Console.SetCursorPosition(0,Console.CursorTop);
                i++;
            }
        }
    }
}

Автор: Ram1reS 24.9.2008, 21:17
Цитата

2) Как добиться того, чтобы после изменения i в функции, в программе i тоже обновилась?

Почитай про передачу переменной по значению и по ссылке (by reference и by value), ключевое слово ref.
Также почитай про ссылочные типы и значимые типы.

Грубо говоря будет приблизительно так:
Код

public static void Main(string[] args)
{
  int i = 0;
  Increment(ref i);
  Console.WriteLine(i.ToString()); // i=10
  Console.ReadLine();
}

static void Increment(ref int enlargeMe)
{
  enlargeMe+=10;
}


ЗЫ.Это:
Код

 foreach (FileInfo fi in di2.GetFiles())
                {
                    StreamWriter sw = null;
                    string sFileName = "log.txt";
                    FileStream fs = File.Open(sFileName, FileMode.Append, FileAccess.Write);
                    sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
                    sw.WriteLine(fi.FullName);
                    sw.Close();
                    sw = null;
                    Dump(di2,i);
                }

Лучше так:
Код

FileStream fs = File.Open(sFileName, FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
string sFileName = "log.txt";
foreach(...)
{
 foreach (FileInfo fi in di2.GetFiles())
                {                                    
                    sw.WriteLine(fi.FullName);
                    Dump(di2,ref i);
                }
}
sw.Close();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)