Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: dB6
Дата сообщения: 21.08.2004 21:20
to all
Народ, подсобите, столкнулся с маленькой проблемкой. Пишу сейчас одну прожку в Билдере 6-ом и понадобилось узнать размер разделов.

Код:
DWORD FreeBytesAvailable;
DWORD TotalNumberOfBytes;
DWORD TotalNumberOfFreeBytes;

BOOL GetDiskFreeSpaceFlag = GetDiskFreeSpaceEx(
"c:\\", // directory name
(PULARGE_INTEGER)&FreeBytesAvailable, // bytes available to caller
(PULARGE_INTEGER)&TotalNumberOfBytes, // bytes on disk
(PULARGE_INTEGER)&TotalNumberOfFreeBytes // free bytes on disk
);
Автор: vndovr
Дата сообщения: 22.08.2004 00:58
Swappp
От 4.x до 6.x - это версии Visual C++ - это я про него. А в C++ Builder c версии 6.0 Stlport поставляется как стандартная библиотека.
С CBuilderX идет она же.


Добавлено
dB6

Код:
DWORD FreeBytesAvailable;
DWORD TotalNumberOfBytes;
DWORD TotalNumberOfFreeBytes;

BOOL GetDiskFreeSpaceFlag = ::GetDiskFreeSpaceEx(
"c:\\", // directory name
(PULARGE_INTEGER)&FreeBytesAvailable, // bytes available to caller
(PULARGE_INTEGER)&TotalNumberOfBytes, // bytes on disk
(PULARGE_INTEGER)&TotalNumberOfFreeBytes // free bytes on disk
);
Автор: dB6
Дата сообщения: 22.08.2004 09:39
vndovr
Каюсь, с типом перепутал, это я просто разный код пробовал. Но суть не в том, DWORD или ULARGE_INTEGER, главное - это ошибка E2015, а она возникает и так и так.
Даже если
Код:
ULARGE_INTEGER fb, tb, tfb;
GetDiskFreeSpaceEx("C:\\", &fb, &tb, &tfb);
Автор: Karlsberg
Дата сообщения: 22.08.2004 12:01
dB6
Предупреждаю - с Дельфи не работал, но на C/C++ сделал бы так:

GetDiskFreeSpaceEx("C:\\", (PULARGE_INTEGER)&fb, (PULARGE_INTEGER)&tb, (PULARGE_INTEGER)&tfb);

типа, кастинг для компилятора - он понимает параметры как _ULARGE_INTEGER*, а функция хочет тип PULARGE_INTEGER. Успехов!
Автор: vndovr
Дата сообщения: 22.08.2004 13:12
dB6
??????????
Я же тебе показал как от нее избавится :
Повторяю:

Код: ::GetDiskFreeSpaceEx(...)
Автор: dB6
Дата сообщения: 26.08.2004 19:15
vndovr
Упс... Это я просто провтыкал двоеточия
Спасибо большое за помощь. Теперь все ОК и количество строчек кода увеличивается


Добавлено
to all
У меня вот еще один вопрос появился. Возможно несколько ламерский. Меня интересует такая возможность, как форматированние разделов под Win из своей программы. Какими способами это можно сделать? Написать программу, которая будет на уровне железа создавать ФС, забивать нулями винт и писать сигнатуру раздела? Или это возможно вызовом функции

Код:
функция(буква_раздела, тип_фс, размер_кластера и т.д.)
Автор: nobody2
Дата сообщения: 27.08.2004 09:43
Смотри Device IO в манах
Автор: dB6
Дата сообщения: 30.08.2004 23:20
nobody2
Совет конечно, хороший. Я бы не спрашивал, если бы хотел получить такой ответ.
Автор: odl455
Дата сообщения: 30.08.2004 23:55
dB6

таких функций в апи нету. библиотек - не видел таких. а сделать поидее можно, задача обозримая вроде
Автор: mihas83
Дата сообщения: 31.08.2004 06:59
dB6
И все-таки вопрос не по программированию на С++.
Открыл бы отдельной темой - может бы быстрее помогли.
А если со стороны железа и ОС - глянь сюда.
Автор: dB6
Дата сообщения: 31.08.2004 21:51
odl455
Сенкс, вразумительный ответ. Хотелось подтверждения своим мыслям. Хотя все-таки хотел бы найти где библиотеки, может кто и писал.

mihas83

Цитата:
И все-таки вопрос не по программированию на С++.

Ну почему же? Если я хочу реализовать это в своей программе на C++, значит это относится к программированнию на C++
Автор: mihas83
Дата сообщения: 01.09.2004 05:57
dB6

Цитата:
Ну почему же? Если я хочу реализовать это в своей программе на C++, значит это относится к программированнию на C++

По такой теории ты знаешь сколько относится к программированнию на C++?
Половина топиков форума ''Прикладное программирование'' можна стащить сюда.
Автор: Arion
Дата сообщения: 01.09.2004 06:28
Если говорить вкратце, ты должен получить дескриптор диска с помощью CreateFile, а затем - использовать функцию DeviceIoControl, передав туда в качестве управляющего параметра один из следующих IOCTL кодов:


IOCTL_DISK_CREATE_DISK
IOCTL_DISK_DELETE_DRIVE_LAYOUT
IOCTL_DISK_FORMAT_TRACKS
IOCTL_DISK_FORMAT_TRACKS_EX
IOCTL_DISK_GET_CACHE_INFORMATION
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
IOCTL_DISK_GET_DRIVE_LAYOUT_EX
IOCTL_DISK_GET_LENGTH_INFO
IOCTL_DISK_GET_PARTITION_INFO_EX
IOCTL_DISK_GROW_PARTITION
IOCTL_DISK_IS_WRITABLE
IOCTL_DISK_PERFORMANCE
IOCTL_DISK_PERFORMANCE_OFF
IOCTL_DISK_REASSIGN_BLOCKS
IOCTL_DISK_SET_CACHE_INFORMATION
IOCTL_DISK_SET_DRIVE_LAYOUT_EX
IOCTL_DISK_SET_PARTITION_INFO_EX
IOCTL_DISK_UPDATE_PROPERTIES
IOCTL_DISK_VERIFY

Поищи в MSDN по ключевому слову Disk Management.
Автор: dB6
Дата сообщения: 01.09.2004 23:03
mihas83
Я не хочу выпадать в оффтопик, и не хочу с Вами ругаться. Я пищу на C++, и задал вопрос, как это реализовать. А раз я задал этот вопрос в теме "Вопросы по программированию на С++ ", значит я подразумеваю, что мне нужна эта возможность для C++-проекта. Если бы мне надо было это реализовать на Pascal, я бы сюда не лез. Еще раз извиняюсь за оффтоп. И... ничего личного. Ок?
Arion
Сенкс, буду копать в эту сторону
Автор: wiwiw
Дата сообщения: 02.09.2004 01:09
dB6
Если бы ты задал этот вопрос в теме про Паскаль, то ответ Arion'a, которому ты сказал


Цитата:
Сенкс


не отличался бы ни на символ.
Автор: mihas83
Дата сообщения: 02.09.2004 07:13
wiwiw

Цитата:
Если бы ты задал этот вопрос в теме про Паскаль, то ответ Arion'a, которому ты сказал, не отличался бы ни на символ.

dB6, можешь писать где хочешь...
Но здесь ''заглянут'' только С++-шники, а в отдельной, правильно сформулированной теме шансов услышать совет гараздо больше.
Автор: RacOon404
Дата сообщения: 07.09.2004 09:58
Приспичило создать кальк (вобще я по книге учусь и пишу только примеры, но еще пытаюсь тут самому придумать )
т.е. просто вводишь первое число, знак (+,-,%,*), второе число - выводится ответ
посидев написал вот такое

Код:
#include "iostream"
using namespace std;
int pek(int, int);
int mek(int, int);
int uek(int, int);
int rek(int, int);
int main()
{
int a, b, c;
char f;
cin >> a;
cin >> f;
cin >> b;
if(f='+') { c=pek(a,b); }
if(f='-') { c=mek(a,b); }
if(f='*') { c=uek(a,b); }
if(f='%') { c=rek(a,b); }
cout << c << endl;
return 0;
}
int pek(int a, int b)
{
return a+b;
}
int mek(int a, int b)
{
return a-b;
}
int uek(int a, int b)
{
return a*b;
}
int rek(int a, int b)
{
return a%b;
}
Автор: WiseAlex
Дата сообщения: 07.09.2004 12:27
RacOon404
бери страуструпа там описано создание простого калькулятора
Автор: f_serg
Дата сообщения: 07.09.2004 15:53
RacOon404

Цитата:
if(f='+') { c=pek(a,b); }
if(f='-') { c=mek(a,b); }
if(f='*') { c=uek(a,b); }
if(f='%') { c=rek(a,b); }


Операция сравнения в C/C++ вот такая '=='. '=' - это присваивание.
Автор: RacOon404
Дата сообщения: 07.09.2004 17:00
Спасибо, заработало... хотя вобще я с самого начала (еще из пхп знал) что в сравнении используется "==", но написав с "==" прога не компилировалась, писала че-то типа того что нельзя использовать == с char типом... а щас все без проблем. еще раз спасибо.
Автор: RedMac
Дата сообщения: 07.09.2004 18:15
Вот тут создал новый топик, так, что если есть примерчики/вопросы, то плз

http://forum.ru-board.com/topic.cgi?forum=33&topic=3790#1
Автор: EvilFly
Дата сообщения: 09.09.2004 14:36
Подскажите , можно ли создать динамическую библиотеку для win32 если в объектах unresolved externals ? То есть под юниксом я могу скомпилить файлы ,которые используют функции какой либо библиотеки и слинковать их в динамическую библиотеку, не линкуя ту библиотеку из которой эти функции я вызываю. Затем скомпилировать файл использующий мою либу и линкеру подкинуть и мою динамическую библиотеку и ту библиотеку или динамическую или статическую - все равно , в которой находятся вызываемые моей библиотекой функции. Можно ли такое провернуть с dll ?
Автор: vndovr
Дата сообщения: 09.09.2004 20:40
Sure
Автор: Dim_San
Дата сообщения: 14.09.2004 19:02
RacOon404

Цитата:
прога не компилировалась, писала че-то типа того что нельзя использовать == с char типом...


А это скорее всего потому что у тебя был вариант когда ты знак совершаемого действия (символ) брал в двойные кавычки.
И дело тут не в ==
Автор: RacOon404
Дата сообщения: 15.09.2004 05:03
Dim_San
Возможно, но вобще брал в одинарные, мог и ошибиться конечно
Автор: RacOon404
Дата сообщения: 18.09.2004 11:00
Как сделать чтоб прога (консольная) после исполнения не закрывалась, кроме как запускать через cmd. Т.е. в коде что-нибудь подписать или еще как нибудь?
Автор: Karlsberg
Дата сообщения: 18.09.2004 11:21
RacOon404
Если она запускается через ярлык, можно в нем написать
cmd.exe /K твоя_прога.exe
Тогда после окончания работы проги коммандное окошко останется.
Автор: SXP
Дата сообщения: 18.09.2004 14:00
RacOon404
в конце перед ретурном добавить
1. system("pause");
or
2. getche();
Автор: mihas83
Дата сообщения: 18.09.2004 15:08
SXP

Цитата:
в конце перед ретурном добавить
1. system("pause");
or
2. getche();
Более универсальный вариант.
Автор: RacOon404
Дата сообщения: 18.09.2004 19:18
Ок, спасибо, помогло.
А еще вопрос: как сделать чтоб русский нормально отображался?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.