ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #3361  
Старый 29.07.2009, 01:21
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Если unix like система, то смотри man readdir
 

  #3362  
Старый 29.07.2009, 13:47
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
Сообщение от SeNaP  
Проблема такая.
Как проверить на существоание дериктории, если она есть, то определить путь.
Помогите пожалуйсто
надеюсь, ты имеешь в виду исходя из пути к папке проверить ее наличие.
Конечно можно проверить существование какой-то директории без пути к ней, но ведь же рекурсивный поиск юзать для этого надо.
а в первом случае подойдет такой код:
Код:
#include <stdio.h>
#include <windows.h>

int exist_directory(const char* path)
{
	WIN32_FIND_DATA find_data;
	HANDLE find_handle;
	
	if((find_handle = FindFirstFile(path, &find_data)) == INVALID_HANDLE_VALUE) {
		return 0;
	} else {
		FindClose(find_handle);
		return 1;
	}
}

int main(int argc, char** argv)
{
	if(argc < 2) return EXIT_FAILURE;
	if(exist_directory(argv[1])){
		printf("exist\n");
	} else {
		printf("not exist\n");
	}
	return 0;
}
P.S. да, это только для как бы win-систем

Последний раз редактировалось bons; 29.07.2009 в 13:50..
 

  #3363  
Старый 29.07.2009, 14:05
SeNaP
Участник форума
Регистрация: 07.08.2008
Сообщений: 281
Провел на форуме:
3300342

Репутация: 165
По умолчанию

bons, спс, щас буду сидеть разбираться ))

ЗЫ: Кто может ссылку дать, на сорцы кокого нибудь вирус, который сам распростроняется, чисто для изучения

Последний раз редактировалось SeNaP; 29.07.2009 в 14:19..
 

  #3364  
Старый 29.07.2009, 14:47
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

После пары мучительных дней, я все же добил однонаправленные списки. У меня вышло создать список, просмотреть его, искать в нем нужные данные, удалить полностью весь список, удалить конкретный узел списка, добавить новый узел в конец списка, добавить новый узел в любую другую позицию, сортировать его по данным и номерам узлов. Для этого использовал все свои знания.

Если кому не лень - проанализируйте плз мои труды и посоветуйте, что можно было бы сделать иначе, то есть оптимальнее:
исходник - cpp
готовый exe файл программы

З.Ы. Сообщение о вирусе игнорируйте, так как это мой сайт и я даю гарантию в 100% о безопасности файлов.

Последний раз редактировалось horlyk; 29.07.2009 в 14:57..
 

  #3365  
Старый 29.07.2009, 16:08
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

рекомендация простая - у тебя получилась модульная программа, только заменой модулей на классы. как таковой класс списка не выполняет роль управления списком. точнее он управляет всеми подряд списками. и код, который использует этот класс списка, обязан знать все детали реализации класса Node, хотя вся задача класса List в том, чтобы никто не знал, как он реализован.
Вот тебе простые условия, чтобы список стал нормальным членом ОО общества:
1) Список не должен принимать в паблик методах параметры типа Node
2) Список не должен возвращать в паблик методах параметры типа Node
3) Так как класс List управляет списком, почему среди его членов даннхы нету собственно списка? Точнее головы
4) Работу с вводом-выводом вынеси в отдельный класс. Назови его ListMenu или на свое усмотрение, но в классе списка не должно быть методов, которые не связаны с управлением сущностью.

Ну а так для начала вполне неплохо(в том смысле что это работает =) )
 

  #3366  
Старый 29.07.2009, 16:48
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

Ra$cal, еще раз спасибо за советы и за потраченное время на разборку кода моей программы

З.Ы. тоесть получается я еще не понимаю преимущества ооп. Что можно почитать чтоб понять чем оно лучше?

Последний раз редактировалось horlyk; 29.07.2009 в 17:08..
 

  #3367  
Старый 29.07.2009, 17:44
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Все что в хэдэре заключи в такую конструкцию:
Код:
#ifndef _MB_H_
#define _MB_H_

....

#endif  /* _MB_H_  */
 

  #3368  
Старый 29.07.2009, 18:41
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

ты проверь, возможно ты файл mb.h пытаешься компилить также как и други cpp файлы
 

  #3369  
Старый 29.07.2009, 21:04
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

horlyk
ну это простое правило нужно и можно усвоить и без книг. Если ты делаешь класс - снабди его ровно тем поведением, которое будет ожидать от него человек, увидев имя класса. Вот ты делал список - я ожидал там видеть управление данными. Никаких меню. Ожидал что работать буду так

List list1;
list1.add(name, age);
list1.add(name2, age2);
list1.remove(name1);
list1.sort();
единственный метод, который можно добавить ради простоты - метод view. Хотя на самом деле делается это введением доп класса или снабжением списка например итераторами.

Чтобы понять в общем смысле суть представь, что ты купил машину. Но чтобы на ней ехать тебе надо открыть капот, впрыснуть в карбюратор немного бензина, залезть в кпп и добавить шестеренки, отрегулировать дифференциал... Суть - скрыть ВСЕ, что мешает абстракции. Нажал кнопочку - все сделалось само. Сработал стартер, в карбюратор бензин, искра - завелись. Как на самом деле все это работает - тебя не трогает. Плюс делать вещь должна ровно то, о чем говорит название. Врядли ты обрадуешься, если машина помимо езды еще и мусор собирает, и селедку возит. МОжет конечно это тебе и пригодится, но это лишняя сложность. Или называй машину как селедковоз с мусоросборкой, чтобы знать, чего ожидать, или разбей все фичи на отдельные устройства. Так же в программах =)
Очень простой признак говняности кода - слишком длинные приготовления для работы с классом. В твоем примере это создание Node'ов при любом действии со списком. Логичнее же все повторяющиеся места пихнуть в класс и оставить только вызов метода.
У тебя это не так очевидно ибо список, как уже упоминалось выше, делает помимо управления списком и весь клиентский код
 

  #3370  
Старый 29.07.2009, 22:26
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

То есть, получается нужно чтобы был создан класс List, в нем были все методы управления списком - добавления, удаления, сортировки и т.д. и объект другого класса, то есть класса Node - голова. Это все вынести в отдельный хедер и из мейна управлять так, как ты и описал:
List list1;
list1.add(name, age);
list1.add(name2, age2);
list1.remove(name1);
list1.sort();
и открыть для общего доступа только главные, не вспомогательные методы.
Следовательно ООП подразумевает простоту использования объектов и их методов для конечного пользователя. Я правильно понял?
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ