Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2009, 13:20   #1
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию Проблема работы с кардридером

Привет, вобщем такая проблема пытаюсь узнать свободное дисковое пространство на носителе в кардридере, но возникает проблема если диска в нём нет, пробовал различные процедуры проверки на наличее устройства в нем та же история...

Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
FreeBytesAvailableToCaller : TLargeInteger; 
FreeSize : TLargeInteger;
TotalSize : TLargeInteger;
begin
GetDiskFreeSpaceEx( 'f:',FreeBytesAvailableToCaller,Totalsize,@FreeSize );
if TotalSize = 0 then
ShowMessage('0')
else
ShowMessage('Не ноль!');
end;
Если носителя нет в кардридере то процедура возвращает "Не ноль!" хотя когда смотрошь свойства показывает что ноль занято и ноль свободно!

Да и вобще кард ридер странная штука, перезагружаешь компьютер - пропадает ошибка... но процедура возвращает - Не ноль!
Подскажите как быть...
Изображения
Тип файла: jpg 0000.jpg (59.1 Кб, 51 просмотров)
dolphin705 вне форума Ответить с цитированием
Старый 29.12.2009, 14:23   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

GetFreeSpaceForDrive
попробуйте её(надеюсь она есть в Делфи)

Код:
GetDiskFreeSpaceEx( 'f:',FreeBytesAvailableToCaller,Totalsize,@FreeSize);
разве там не три указателя?
или это борланд так прописал...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.12.2009, 15:31   #3
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

GetFreeSpaceForDrive нету, по краеней мере в D7.

function GetDiskFreeSpaceEx(lpDirectoryName: PChar;
var lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes: PLargeInteger): BOOL;

в функции всё прописано верно
dolphin705 вне форума Ответить с цитированием
Старый 29.12.2009, 15:45   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
function GetDiskFreeSpaceEx(lpDirectoryName: PChar;
var lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes: PLargeInteger): BOOL;
странно как то борланд прописал...и var и PLargeInteger

попробуйте сами обнулять переменные перед использованием.

Код:
function FreeSpace(lpDirectoryName:PANSIChar;var lpFreeBytesAvailable:ULARGE_INTEGER;var lpTotalNumberOfBytes:ULARGE_INTEGER;
                   var lpTotalNumberOfFreeBytes:ULARGE_INTEGER):BOOL;stdcall;external 'Kernel32.dll' name 'GetDiskFreeSpaceExA';

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var A1,A2,A3:ULARGE_INTEGER;
begin
 if FreeSpace('H:\',A1,A2,A3)
  then ShowMessage(IntToStr(A1.QuadPart)+' '+IntToStr(A2.QuadPart)+' '+IntToStr(A3.QuadPart))
  else ShowMessage('Неудачно);
end;
я делал так, все отлично.(как видите я сам написал заголовок функции, но это та же GetDiscFreeSpaceEx)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось mihali4; 20.01.2010 в 17:35.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.12.2009, 16:16   #5
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Злаполучная ошибка всётаки вылезла!
Изображения
Тип файла: jpg 00.jpg (14.4 Кб, 46 просмотров)
dolphin705 вне форума Ответить с цитированием
Старый 29.12.2009, 16:47   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы пробывали сейчас через мой код?
просто я проверял тоже на картридере.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.12.2009, 16:55   #7
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

dolphin705, а что try except уже не катит??
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 29.12.2009, 18:08   #8
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Этот код
Код:
function FreeSpace(lpDirectoryName:PANSIChar;var lpFreeBytesAvailable:ULARGE_INTEGER;var lpTotalNumberOfBytes:ULARGE_INTEGER;
var lpTotalNumberOfFreeBytes:ULARGE_INTEGER):BOOL;stdcall;external 'Kernel32.dll' name 'GetDiskFreeSpaceExA';

procedure TForm1.Button2Click(Sender: TObject);
var
A1,A2,A3:ULARGE_INTEGER;
begin
try
if FreeSpace('f:\',A1,A2,A3) then
ShowMessage(IntToStr(A1.QuadPart)+' '+IntToStr(A2.QuadPart)+' '+IntToStr(A3.QuadPart))
else
ShowMessage('Неудачно');
except
exit
end;
end;
тоже сначало выдаёт ошибку потом месаг - неудачно

Может проблема ещё в том что кард ридер в примтер встроен ещё???
dolphin705 вне форума Ответить с цитированием
Старый 29.12.2009, 18:57   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

проверил код Пепел Феникса на картридере ноута свого, працюэ...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 20.01.2010, 13:45   #10
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

А если попробовать отловить злаполучное сообщение об ошибке - диск отсутствует и обработать?
dolphin705 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема: не работают шаблоны при переходе работы с Database Desktop в Delphi7 Spider65 БД в Delphi 7 25.05.2009 21:49
Для облегчения работы с TFS - приложение для работы над дефектами и задачами Аякс Софт 1 18.03.2009 11:43
Ускорение работы с БД za4ot БД в Delphi 6 11.07.2008 19:05
Беда с Кардридером при помощи WM_DEVICECHANGE eriser Win Api 1 30.01.2008 17:39
способы работы с Б.Д. Ванька БД в Delphi 1 20.11.2007 22:12