Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 271
от 31.05.2003, 22:50

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 817
Отправлено ответов: 1871
Активность: 229.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Hayk
Статус: Доверительный
Общий рейтинг: 114.11
[Подробней >>]
Ramzes
Статус: Профессиональный
Общий рейтинг: 128.42
URL: Microsoft homepage
[Подробней >>]
BOLT
Статус: Опытный
Общий рейтинг: 160.78
URL: В помощь начинающему программитсу Assembler, C/C++
[Подробней >>]
 
[MozgC]
Статус: Опытный
Общий рейтинг: 179.13
[Подробней >>]
Avl2k
Статус: Опытный
Общий рейтинг: 126.04
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.15
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 806. Доброго времени суток, эксперты. Есть такая проблема: удаление непустого каталога(файлы/вложенные ка... (ответов: 5)
Вопрос № 807. Здравствуйте. Мне надо написать FAQ. С возможностью задавания вопросов. Но при получении данных ме... (ответов: 1)
Вопрос № 808. В упражнении книги Д. Рассохина "От Си к Си++" есть такой пример использования преобразов... (ответов: 5)
Вопрос № 809. Пожалуйста помогите разобраться с экранным меню Buildera, а то всё на английском и я ничего не поним... (ответов: 2)
Вопрос № 811. Здравствуйте. В приложении функция video_mode() из древней книги от Шлидта. Функция используется дл... (ответов: 5)

Вопросов: 5, ответов: 18


 Вопрос № 806

Доброго времени суток, эксперты.
Есть такая проблема: удаление непустого каталога(файлы/вложенные каталоги). Вроде понятно что нужна рекурсия. Только вот загвоздка в чём - компилятор Turboc30(никакого визуала, только консоль), в хелпе нашёл findferst, так вот, какой ей параметр передать, чтобы она находила не только каталоги, но файлы(скрытые, только чтение, и т.д.).В Delphi есть такой параметр как AniFile, а вот в С?
А может у вас есть другое решение, более простое?
эыж ос-win98.



Вопрос отправлен: 27.05.2003, 23:13
Отправитель: Michael

[Следующий вопрос >>] [Список вопросов]

Отвечает Hayk

Добрый день, Michael!
Ispol'zuy funkcii FindFirstFile i FindNextFile. V etix funkciax kak parametry ispol'zuyutsya HANDLE i WIN32_FIND_DATA. Iz posledney strukturi naxodish' imya, razmer i drugie parametry tekushego naydennogo faila. Tol'ko postaraysya ne pol'zovat'sya class-om CFileFind iz MFC. Nestabil'no rabotayet. Udachi.

Ответ отправлен: 29.05.2003, 14:10
Отправитель: Hayk


Отвечает Ramzes

Доброе время суток, Michael!
Первым параметром передаешь "*.*", и потом сравниваешь поле attrib структуры _finddata_t со следующими флагами посредством побитового AND
#define _A_NORMAL 0x00 /* Normal file - No read/write restrictions */
#define _A_RDONLY 0x01 /* Read only file */
#define _A_HIDDEN 0x02 /* Hidden file */
#define _A_SYSTEM 0x04 /* System file */
#define _A_SUBDIR 0x10 /* Subdirectory */
#define _A_ARCH 0x20 /* Archive file */

Ответ отправлен: 30.05.2003, 13:32
Отправитель: Ramzes


Отвечает BOLT

Приветствую Вас, Michael!
int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);
1-й параметр путь поиска
2-й параметр это структура:

struct ffblk {
long ff_reserved;
long ff_fsize; /* размер файла */
unsigned long ff_attrib; /* атрибуты найденого */
unsigned short ff_ftime; /* время модификации */
unsigned short ff_fdate; /* дата модификации */
char ff_name[256]; /* имя найденого файла*/
};

3-й параметр это атрибуты файлов для поиска:

FA_RDONLY Только для чткния
FA_HIDDEN Скрытый файл
FA_SYSTEM Системный файл
FA_LABEL метка диска
FA_DIREC дирректория
FA_ARCH архивный

И наконец пример:

/* применение функций поиска файлов findfirst и findnext на примере поиска скрытных файлов*/
#include
#include
int main(void)
{
struct ffblk ffblk;
int done;
printf("Обзор всех скрытных файлов домашней дирректории ");
done = findfirst("*.*",&ffblk,FA_HIDDEN);
while (!done)
{
printf(" %s ", ffblk.ff_name);
done = findnext(&ffblk);
}
return 0;
}

Счастливо!


Ответ отправлен: 29.05.2003, 17:32
Отправитель: BOLT


Отвечает [MozgC]

// Ищем все файлы со всеми аттрибутами и каталоги внутри
// текущего каталога
// Добавь тут проверку на найденный каталог и сделай
// рекурсию. Все...
#include
#include
int main(void)
{
struct find_t ffblk;
int done;
done = _dos_findfirst("*.*",19,&ffblk);
while (!done) {
printf(" %s ", ffblk.name);
done = _dos_findnext(&ffblk);
}
fclose(F);
return 0;
}

Ответ отправлен: 28.05.2003, 00:25
Отправитель: [MozgC]


Отвечает Avl2k

Добрый день, Michael!
Не знаю как в TC3.0, а в BC++ 3.1 для поиска директорий функции finfirst
int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);
надо указывать в атрибуте (последний параметр) флажок FA_DIREC.
С уважением, Avl2k.

Ответ отправлен: 28.05.2003, 16:10
Отправитель: Avl2k


 Вопрос № 807

Здравствуйте.
Мне надо написать FAQ. С возможностью задавания вопросов.
Но при получении данных методом POST почему-то не передаются(или я не так читаю) спецсимволы. Точнее, передаются, но '"' передаётся как '"', '<' - как '<' и т.д. а не %XX
Что я не правильно делаю?
В приложении - моя процедура считывания и структура данных(для понятности)


Приложение:


Вопрос отправлен: 28.05.2003, 05:41
Отправитель: Victor (vcr@nm.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает BOLT

Добрый день, Victor!
Чего мучаешься?
символ % - код 0x25
символ < - код 0x3C
if (char == 0x25) //если символ равен '%'
и т.д.
Счастливо!

Ответ отправлен: 28.05.2003, 17:18
Отправитель: BOLT


 Вопрос № 808


В упражнении книги Д. Рассохина "От Си к Си++" есть такой пример использования преобразования типов:
void swap4(double &x, double &y) {…}

int a=0, b=1

swap4(a, b);
При компиляции на Visual C++ 6.00 пишеться:
swap4' : cannot convert parameter 1 from 'int' to 'double &'
Рассохин же говорит о том, что в данном случае: "компилятор создает временную переменную требуемого типа, присваивает ей значение передаваемого параметра (конечно, после преобразования типа, если таковое возможно!), и функции передается адрес этой временной переменной."
Может, дело в том, что Рассохин использовал компилятор Borland C++ 3.0? Или дело в чем-то другом?
Как же сделать так, чтобы происходило преобразование типов?
На всякий случай, посылаю текст всего упражнения.


Приложение:


Вопрос отправлен: 28.05.2003, 08:51
Отправитель: Alexander

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Здравствуйте, Alexander!
извиняюсь за грубость, но по-видимому Рассохин мудак.
Ссылка на то она и ссылка, что должна указывать на настоящий объект. В случае с const double & d, компилятор может и создать временный объект, но без const - не должен.

Ответ отправлен: 29.05.2003, 09:47
Отправитель: vitya


Отвечает Ramzes

Здравствуйте, Alexander!
Книжка наверное старая.
Потому что компилятор VC 6.0 действительно не разрешает подобного преобразования типов. Разрешается так
void print(const double& a, const double& b);
int a = 5, b = 7;
print(a, b);

Ответ отправлен: 30.05.2003, 13:24
Отправитель: Ramzes


Отвечает [MozgC]

В компиляторе Borland C++ 3.0 действительно вес работает

Ответ отправлен: 28.05.2003, 12:01
Отправитель: [MozgC]


Отвечает Avl2k

Здравствуйте, Alexander!
Если параметр функции ссылка, то передать параметром временную переменную можно только в том случае, если ссылка будет константной. Иначе поведение будет странным: допустим, компилятор создаст временные double-переменные для int'ов; затем в функции swap4 значения этих переменных обменяются, но при этом значения исходных int'ов не изменятся - это явно не то, что Вы ожидаете.
А компилятор BC++ 3.0, видимо, ещё не подозревал об этом. Хотя я пробовал компилировать этот пример BC++ 3.1, и он выдал предупреждение.
С уважением, Avl2k.

Ответ отправлен: 28.05.2003, 12:25
Отправитель: Avl2k


Отвечает BOLT

Здравствуйте, Alexander!
Не знаю, что там говорит Д. Рассохин, но если даже подумать логически: как ссылка одного типа переменной может ссылаться на другой тип переменной.Автоматическре преобразование в C++, если я не ошибаюсь, применимо только для фактичеких переменных, а не для их ссылок.
Попробуй передовать параметры как фактические перменные.
Это мое мнение - я могу ошибаться.
Счастливо!

Ответ отправлен: 28.05.2003, 17:28
Отправитель: BOLT


 Вопрос № 809

Пожалуйста помогите разобраться с экранным меню Buildera, а то всё на английском и я ничего не понимаю.Например, команды Project, View и всех других команд.Буду очень благодарен!



Вопрос отправлен: 28.05.2003, 09:54
Отправитель: Игорь (garic2002@hotbox.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает [MozgC]

Тебе лучше купить книжку по Buileder'у или скачай в инете книгу в электронном варианте, поищи в поисковиках

Ответ отправлен: 28.05.2003, 11:58
Отправитель: [MozgC]


Отвечает BOLT

Доброе время суток, Игорь!
Мой тебе совет, Игорь, установи себе электронный переводчик, например "ABBY Lingvo".А то завтра может попросишь перевести и MSDN :з).
Ты не обижайся, просто все мы так делаем.
Счастливо!

Ответ отправлен: 28.05.2003, 17:38
Отправитель: BOLT


 Вопрос № 811

Здравствуйте.
В приложении функция video_mode() из древней книги от Шлидта. Функция используется для определения текстового режима экрана. Пожалуйста растолкуйте мне зачем здесь запись "& 255", что она делает и что будет если это туда не написать.
З.Ы. Большое спасибо.


Приложение:


Вопрос отправлен: 28.05.2003, 20:42
Отправитель: CrazyIronToilet

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Здравствуйте, CrazyIronToilet!
точно сказать не могу, но скорее всего функция int86 возвращает слово (2 байта), один старший байт наверное возвращает статус или что-нибудь из этой серии, а нас интересует лишь младший байт, который получается с помощью
& 255.
Да - и он Шилдт. :) :)

Ответ отправлен: 29.05.2003, 09:39
Отправитель: vitya


Отвечает Hayk

Доброе время суток, CrazyIronToilet!
Dumayu int86 vosvrashyayet znacheniye tipa short, int, long, i v poslednem baite vozvrashayet'ysa tekstovi rejim. V starshix baitax naxodit'say kakaya-to informaciya, kotoraya ni imeet v dannom sluchaye znacheniya, pobitovoi operaciei obnulyayem starshie baity vozvrashennogo znacheniye.
int : 0xA3015F08 & 0x000000FF(255) = 0x08 ( eto i est' identifikator rejima )
& eto operator bobitovogo i. bitwise AND. Kotory obnulyayet starshie baity.

Ответ отправлен: 29.05.2003, 14:30
Отправитель: Hayk


Отвечает Ramzes

Здравствуйте, CrazyIronToilet!
По моему если убрать &255 то ничего не изменится, т.к. при побитовом AND любого числа с единицами (255 = 11111111 ) число не изменится.

Ответ отправлен: 30.05.2003, 13:10
Отправитель: Ramzes


Отвечает [MozgC]

Ничего не должно измениться. это побитовый оператор AND
Значение возвращаемое функцией int86 подвергнется операции И, и video_mode будет возвращать значение равное x and 255, где X - значение возвращаемое int86, Однако
255 = FF = 1111111, поэтому ничего не изменит, можно убрать &255 и ничего не изменится..
таблица AND:
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1


Ответ отправлен: 28.05.2003, 21:21
Отправитель: [MozgC]


Отвечает BOLT

Приветствую Вас, Сумашедший Железный Туалет!
& в C оператор битового сравнения, анологичен в асме AND.
255 в двоичной системе исчесления равно 11111111.Ну так вот, если у обоих операндов биты 1 и 1, значит значение выражения тоже 1, в других случаях 0.
Пример:
01011010 - исходное число
AND
11111111 - это 255 в dec-исчеслении
=
01011010 - это результат
Короче: аставь как есть и учи асм!
Счастливо!

Ответ отправлен: 28.05.2003, 22:16
Отправитель: BOLT



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (41)
C / C++ (32)
Perl (5)
Builder / Delphi (16)
Pascal (29)
Basic / VBA (12)
Java / JavaScript (11)
PHP (7)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (37)
Windows NT/2000/XP (30)
"Железо" (28)
Поиск информации (14)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (9)
Юристу
Гражданское право (5)
Семейное право (2)
Трудовое право (3)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное