Вот, моя первая программа под .NET. Знаю, много кривостей, но делалась под определенную задачу — расчистить место на диске. Таки вычислил и стер 30 гигабайт
Сделал программу для удобной чистки диска — легко посмотреть, что сколько места занимает. Введитие в верхнем поле папку(например, "C:\"), которую надо чистить и нажмите кнопку со стрелкой. Далее выбирайте файлы/папки/расширения и удаляйте их.
Для работы требуется .NET framework 1.1. Если у вас установлен Visual Stuido .NET 2003, значит framework тоже установлен.
Программа распостраняется вместе с исходником. Если будете критиковать, давайте конкретные советы по исправлению =)
Правильно работающая программа — просто частный случай Undefined Behavior
_W>Программа распостраняется вместе с исходником. Если будете критиковать, давайте конкретные советы по исправлению =)
Полезные и не очень советы, вопросы, предложения:
1) 1 класс == 1 файл. Не стейсняйся
2) Вот от этого отучайся. Я за такое знаешь что делаю когда на review нахожу? Лучше не знать Поэтому в последнее время и не нахожу. Проблемы нужно не замазывать а решать:
if (folderView.SelectedItems.Count == 0)
return;
ListViewItem folderViewItem = folderView.SelectedItems[0];
4) Неплохо бы добавить в строку поиска запуск поиска по Enter
5) Маленький экперимент. Запускаем сканирование чего то типа c:\windows и закрываем приложение. Потом любуемся в таскменеджере как приложение продолжает работать.
Неплохо бы добавить выделенное
buildFilesDataBaseThread = new System.Threading.Thread(
new System.Threading.ThreadStart(BuildFilesDataBaseThreadProc));
buildFilesDataBaseThread.Start();
buildFilesDataBaseThread.IsBackground = true;this.CheckBuildThreadTimer.Enabled = true;
6) Прежде чем передавать сюда что попало:
DirectoryInfo dirInfo = new DirectoryInfo(root_path);
неплохо бы сделать что то типа:
if(!Directory.Exists(root_path))
{
// сообщить пользователю что он пытается обмануть програмку :)return;
}
7) Не совсем понятно что происходит по двойному нажатию на панели с ресширениями. Мы куда то навигируемся, но логики честно говоря не понял
Может добавить снизу еще список, где при выборе чего то в списке с расширениями будут отображатся полные пути к файлам с таким расширением?
8) При выполнении каких либо деструктивных действий, как то удаление, рекомендуется спросить пользователя находится ли он в здравом уме и при памяти
В общем пока думаю хватит. Хочу отметить что в целом действительно неплохо как для начала
Спасибо за внимание.
Есче немного критики :
1) Имя класса FileInfo уже существует в намеспасе System.IO.
2) Просто из уважения к пользоватедю я бы добавил потдержку тем, кнопочку броуз. Выровнял бы текст бокс. Ну вобщемто навел бы порядок. И гланое поискал бы иконки не с 256 цветами .
3) Из уважения к программистам вынес бы все классы в отдельные файлы.
Кстати в своей первой проге я незнал что существует модифер volatile. И не использовал абстрактные классы.
Здравствуйте, Andre, Вы писали:
_W>>Программа распостраняется вместе с исходником. Если будете критиковать, давайте конкретные советы по исправлению =)
A>Полезные и не очень советы, вопросы, предложения:
Спасибо!
A>1) 1 класс == 1 файл. Не стейсняйся
Согласен.
A>2) Вот от этого отучайся. Я за такое знаешь что делаю когда на review нахожу? Лучше не знать Поэтому в последнее время и не нахожу. Проблемы нужно не замазывать а решать: A>
A> }
A> catch (Exception)
A> {
A> }
A>
Ну, единственное разумное что тут можно сделать — это сообщить в лог. Тоже согласен.
A>3) ИМХО lastFolderViewClickedPoint лишняя конструкция: A>
A> ListViewItem folderViewItem =
A> folderView.GetItemAt(lastFolderViewClickedPoint.X, lastFolderViewClickedPoint.Y);
A>
A>Вполне заменяется таким: A>
A> if (folderView.SelectedItems.Count == 0)
A> return;
A> ListViewItem folderViewItem = folderView.SelectedItems[0];
A>
Эээ... Не понял. Как мне в двойном щелчке определить, по какому элементу кликнули? Или гарантируется, что он окажется выделенным?
A>4) Неплохо бы добавить в строку поиска запуск поиска по Enter
Угу.
A>5) Маленький экперимент. Запускаем сканирование чего то типа c:\windows и закрываем приложение. Потом любуемся в таскменеджере как приложение продолжает работать. A>Неплохо бы добавить выделенное A>
A> buildFilesDataBaseThread = new System.Threading.Thread(
A> new System.Threading.ThreadStart(BuildFilesDataBaseThreadProc));
A> buildFilesDataBaseThread.Start();
A> buildFilesDataBaseThread.IsBackground = true;
A> this.CheckBuildThreadTimer.Enabled = true;
A>
A> DirectoryInfo dirInfo = new DirectoryInfo(root_path);
A>
A>неплохо бы сделать что то типа: A>
A> if(!Directory.Exists(root_path))
A> {
A> // сообщить пользователю что он пытается обмануть програмку :)
A> return;
A> }
A>
Ага.
A>7) Не совсем понятно что происходит по двойному нажатию на панели с ресширениями. Мы куда то навигируемся, но логики честно говоря не понял
Я тоже. Вроде, я обрабатываю сообщение о двойном клике только от левой панели, а почему щелчок приходит и когда он сделан по второй панели, не понимаю. A>Может добавить снизу еще список, где при выборе чего то в списке с расширениями будут отображатся полные пути к файлам с таким расширением?
Ыыы! Их может быть тысячи.
A>8) При выполнении каких либо деструктивных действий, как то удаление, рекомендуется спросить пользователя находится ли он в здравом уме и при памяти
Я тоже об этом думал... Мне показалось это неудобным. Как бы сделать одновременно и удобным, и безопасным? У меня была такая идея — не стирать, а только добавлять в какой-то список для удаления. А потом уже целиком стирать все списке. Но это было уже слишком сложно, и возможно слишком непонятно для пользователя
A>В общем пока думаю хватит. Хочу отметить что в целом действительно неплохо как для начала
Спасибо. A>Спасибо за внимание.
Правильно работающая программа — просто частный случай Undefined Behavior
Здравствуйте, ctmike, Вы писали:
C>2) Просто из уважения к пользоватедю я бы добавил потдержку тем, кнопочку броуз. Выровнял бы текст бокс. Ну вобщемто навел бы порядок. И гланое поискал бы иконки не с 256 цветами .
В них 16 цветов! Это все, что я смог найти в c:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Graphics\bitmaps\
Правильно работающая программа — просто частный случай Undefined Behavior
Моя первая полезная программа под .NET
От:
Аноним
Дата:
17.07.05 11:53
Оценка:
Прбовал на Win XP Pro, ввел имя папки, нажал-списка файлов нету
Здравствуйте, Alex_1, Вы писали:
A_>Прбовал на Win XP Pro, ввел имя папки, нажал-списка файлов нету
Ввел логгинг. Теперь можно посмотреть, что у тебя там за ошибка, если она залогируется, конечно.
Новая версия. Исправил несколько мелких недочетов, с учетом того что сказал Andre. Программа доступна по прежнему адресу.
Правильно работающая программа — просто частный случай Undefined Behavior
Re: Моя первая полезная программа под .NET
От:
Аноним
Дата:
17.07.05 21:13
Оценка:
Никогда не использовал volatile, объясните его смысл.
(Он для .Net 1.0 не компилится: Invalid token 'volatile' in class, struct, or interface member declaration.)
_______________________________________ Смысл существования Вселенной заключается в обеспечении функционирования Вселенной + смысловой Довесок. v.0.1.
Запустил программку, выбрал корневую папку достаточно большого и загаженного диска и словил такую хрень:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at DiscCleaner.SortFileOrFolderBySize.System.Collections.IComparer.Compare(Object FileOrFolder1, Object FileOrFolder2)
at System.SorterObjectArray.QuickSort(Int32 left, Int32 right)
_W>Спасибо всем, кто помогал мне на форуме
_W>Вот, моя первая программа под .NET. Знаю, много кривостей, но делалась под определенную задачу — расчистить место на диске. Таки вычислил и стер 30 гигабайт _W>Сделал программу для удобной чистки диска — легко посмотреть, что сколько места занимает. Введитие в верхнем поле папку(например, "C:\"), которую надо чистить и нажмите кнопку со стрелкой. Далее выбирайте файлы/папки/расширения и удаляйте их.
_W>Для работы требуется .NET framework 1.1. Если у вас установлен Visual Stuido .NET 2003, значит framework тоже установлен.
_W>Программа распостраняется вместе с исходником. Если будете критиковать, давайте конкретные советы по исправлению =)
не совсем понимаю полезность данной программы... в чем соль?
Одинаковые ошибки необязательно делать каждый раз, достаточно сделать одну, а затем обращаться к ней по мере необходимости из любого места программы.
Здравствуйте, _Winnie, Вы писали:
_W>Программа распостраняется вместе с исходником. Если будете критиковать, давайте конкретные советы по исправлению =)
Многое уже добавили по поводу реализации, а я бы добавил по поводу офрмления кода, если вы не против
1. Каждый класс в отдельном файле (об этом уже сказали, но я повторюсь, чтобы составить общую картину)
2. Не должно быть никаких публичных членов у класса, то есть полная инкапсуляция. Даже если у вас у класса всего два поля, и они должны читаться и писаться (например ExtInfo), то все же стоит добавить get и set.
Объясню. У вас будет много классов в проекте, и у каких-то свойств будут set'еры, у каких-то не будет. В итоге имеем разнобойный стиль в пределах одного проекта.
3. Единый стиль именования полей и переменных.
Мне, например, было сложно с ходу понять что такое subDirs в методе Delete(). Это переменная метода или член класса? В методе ReduceSize() например вы используете this, тем самым сразу понятно, что обращение идет к члену класса (или свойству). Некоторые члены класса у вас именованы со знаком "_" в начале имени, а некоторые нет. Я к тому, что желательно, чтобы стиль был единым. Какой — решать уже вам, ну либо это установлено правилами компании в которой вы работаете. Например члены классов начинаются символами "m_" а переменный внутри методов просто с маленькой буквы, имена классов с большой. Либо же при обращении к членами всегда использовать ключевое слово this.
Код чаще читается чем пишется, поэтому желательно чтобы стиль были единым в пределах проекта, это позволяет больше внимания приделить разбору самой логики блока программы.
4. У вас члены класса объявлены в разных местах, ну это наверное в следствии того, что все классы объявлены как подклассы в одном файле. Я к тому, что желательно разбивать это все по группам. Либо группируя по конструкциям (например сначала поля, потом методы, потом свойства и тд), либо группируя исходя из логики работы программы (класса), но тогда обрамлять куски кода директивами #region. Ну например кусок кода, где идет работа с файлами поместить в отдельный #region, где будут и методы и свойства и поля.
Все мои "желательно", "следует", "лучше" и тд, прошу считать как ИМХО
_W>Спасибо всем, кто помогал мне на форуме
_W>Вот, моя первая программа под .NET. Знаю, много кривостей, но делалась под определенную задачу — расчистить место на диске. Таки вычислил и стер 30 гигабайт _W>Сделал программу для удобной чистки диска — легко посмотреть, что сколько места занимает. Введитие в верхнем поле папку(например, "C:\"), которую надо чистить и нажмите кнопку со стрелкой. Далее выбирайте файлы/папки/расширения и удаляйте их.
_W>Для работы требуется .NET framework 1.1. Если у вас установлен Visual Stuido .NET 2003, значит framework тоже установлен.
_W>Программа распостраняется вместе с исходником. Если будете критиковать, давайте конкретные советы по исправлению =)
Предлагаю еще заинсталить FxCop(http://www.gotdotnet.com/team/fxcop/) и натравить на исполняемый файлик. Увидите несколько полезных рекомендаций, и много не очень полезных
> Предлагаю еще заинсталить FxCop(http://www.gotdotnet.com/team/fxcop/) и > натравить на исполняемый файлик. Увидите несколько полезных > рекомендаций, и много не очень полезных
Рекомендуется рассматривать это так:
"несколько понятных рекомендаций, и много не очень понятных"