-
Лучший говнокод
- В номинации:
-
- За время:
-
-
+109
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
procedure RemoveDir(path: string);
var
sr: TSearchRec;
begin
if FindFirst(path + '\*.*', faAnyFile, sr) = 0 then
begin
repeat
if sr.Attr and faDirectory = 0 then
DeleteFile(path + '\' + sr.name);
else
RemoveDir(path + '\' + sr.name);
until
FindNext(sr) <> 0;
end;
FindClose(sr);
RemoveDirectory(PChar(path));
end;
История такова, писал я как-то программу по курсовому. (Это было еще года два-три назад, когда я про юнит тесты и различные технологии проектирования и разработки ничего не знал.) По задумки программа распаковывала некие файлы во временный каталог рядом с приложением и по завершению работы с ними удаляла эту папку вот этим методом. Итак, запустил я эту подпрограмму на выполнение для проверки ее работоспособности и смотрю в файловом менеджере, что папка успешно удалилась и все ок. Но вдруг студия начала жаловаться что нет каких-то файлов, я смотрю в файловый менеджер и вижу что файлы проекта программы исчезают буквально на глазах! Естественно я резко убиваю программу и далее начинаю восстанавливать исходники. Благо, что делал бэкапы и эта подпрограмма проработала все ничего, а ведь последствия могли быть еще больше. А мораль такая, нужно быть предельно внимательным, когда работаешь с удалением какой-либо информации.
P.S. Нужно добавить проверку между 10 и 11 строкой:
if (sr.Name <> '..') and (sr.Name <> '.') then
vanished,
18 Декабря 2010
-
+109
- 1
- 2
- 3
- 4
- 5
procedure TForm2.ExitButtonClick(Sender: TObject);
begin
Close;
Form1.Close;
end;
Об Application.Terminate даже и не догадываемся...
PEMOHT,
12 Декабря 2010
-
+109
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
/*
* The dump header describes the contents of a crash dump. Two headers
* are written out: one at the beginning of the dump, and the other at
* the very end of the dump device. The terminal header is at a known
* location (end of device) so we can always find it. The initial header
* is redundant, but helps savecore(1M) determine whether the dump has been
* overwritten by swap activity. See dumpadm(1M) for dump configuration.
*/
#define DUMP_MAGIC 0xdefec8edU /* dump magic number */
вот такая сигнатура у крэшдампа соляриса
bugmenot,
02 Ноября 2010
-
+109
- 1
if (embededDatasourceItem.Text.Localized(language) == string.Empty)
Это вместо string.IsNullOrEmpty
imshaman,
16 Июля 2010
-
+109
- 1
- 2
- 3
- 4
- 5
if(!mysql_select_db($db_name,$data)){
print "<BR>";
echo mysql_error();
die();
}
Нашел в одном из движков онлайн игры
Vasiliy,
30 Мая 2010
-
+109
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
private void timer1_Tick(object sender, EventArgs e)
{
Process[] myP = Process.GetProcessesByName("TASKMGR");
foreach (Process p in myP)
{
p.CloseMainWindow();
}
}
Защита! Чтобы студенты не махлевали. Программа закрывается только вводом пароля. Таймер хуярит форму все время поверх всех окон и люто ненавидит все, что похоже на "диспетчер задач"...
Anderson,
13 Мая 2010
-
+109
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
class A{}
class B:A{}
class C
{
A EA;
void M(A AA, decimal Key)
{
EA=AA;
EA.Work();
}
}
class D
{
C EC=new C();
void M()
{
EC.M(new A());
}
}
Форматирование сохранено.
К этому прилагается такой литорический вопрос:
EC.M(new A());
Как тут вызвать конструктор B?
guest,
18 Марта 2009
-
+108.8
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
...
IEnumerable<Status> Statuses;
public Status GetCurrentStatus1() {
var e = Statuses.GetEnumerator();
e.MoveNext();
return e.Current;
}
public Status GetCurrentStatus2() {
foreach (var e in Statuses)
return e;
return null;
}
public Status GetCurrentStatus3() {
return Statuses.FirstOrDefault();
}
Возник вопрос - что больший говнокод? Или есть вариант лучше? (3 вариант хорош, но только когда .NET 3 есть)
guest,
01 Февраля 2009
-
+108.7
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
Function GetFmtTime:String;
var
tmpD : string;
crdate: TDateTime;
begin
crdate := Now;
tmpD := IntToStr(YearOf(crdate))+'-';
If MonthOf(crdate)<10 Then tmpD := tmpD + '0';
tmpD := tmpD + IntToStr(MonthOf(crdate))+'-';
If DayOf(crdate)<10 Then tmpD := tmpD + '0';
tmpD := tmpD + IntToStr(DayOf(crdate))+'(';
If HourOf(crdate)<10 Then tmpD := tmpD + '0';
tmpD := tmpD + IntToStr(HourOf(crdate)) + '-';
If MinuteOf(crdate)<10 Then tmpD := tmpD + '0';
tmpD := tmpD + IntToStr(MinuteOf(crdate)) + '-';
If SecondOf(crdate)<10 Then tmpD := tmpD + '0';
tmpD := tmpD + IntToStr(SecondOf(crdate)) + ')';
Result := tmpD;
end;
А почему бы не использовать обычную FormatDateTime?!
До моего прихода на фирму все пользовались выше приведенным кодом! (и много еще чем!)
Antonio_net,
17 Февраля 2010
-
+108.6
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
/**
* Копирует первое большое число во второе.
*
* @param a большое число приемник
* @param b большое число источник
* @param n длинна больших чисел в словах
*
* @return FALSE - четное, TRUE - нечетное
*/
void int_copy(uword_t *a, const uword_t *b, const int n)
{
memcpy(a, b, sizeof(a[0]) * n);
}
Вот такую милую функцию я нашел в проекте над которым работаю.
pvkr2,
12 Октября 2009