reconnector
Гость
|
|
« Ответ #30 : 10-04-2005 08:48 » |
|
продолжу Тут же чтоб топ не создавать Использую функцию DWORD GetLogicalDriveStrings( DWORD nBufferLength,LPTSTR lpBuffer); Описание: lpBuffer-буфер для строки. После вызова функции он будет содержать строку следующего формата: c:\#0d:\#0e:\#0#0 Почему у меня выдает лишь A:\ и все ? Вот: void __fastcall TForm1::Button1Click(TObject *Sender) {
int max=1024; char* buff=new char[max]; DWORD dAllDisks=GetLogicalDriveStrings(max,buff); if(dAllDisks) { Edit1->Text=buff; } ............................................................
|
|
|
Записан
|
|
|
|
dimedrol
Помогающий
Offline
|
|
« Ответ #31 : 10-04-2005 08:56 » |
|
А ты чем смотрел в режиме отладки Evaluate-ом(Watch) или по адресу в памяти? Если первым, так после терминирующего нуля ничего видно не будет. ЗЫ Вот если бы ты объявил массив: char buff[1024];
то тогда можно былоб посмотреть все содержимое.
|
|
« Последнее редактирование: 10-04-2005 10:49 от dimedrol »
|
Записан
|
Как говориться, cемь бед - один Reset
|
|
|
reconnector
Гость
|
|
« Ответ #32 : 10-04-2005 14:14 » |
|
так не идет все равно выдается тока A:\
|
|
|
Записан
|
|
|
|
dimedrol
Помогающий
Offline
|
|
« Ответ #33 : 10-04-2005 20:46 » |
|
Все, дошло. Я так понимаю ты смотришь строку в едите. Короче перед Edit1->Text=buff; вставь цикл забивающий лишние нули: int i; if(dAllDisks) { for(i=0; i<1024-1; i++) if( buff[i]==0) { if(buff[i+1] != 0) buff[i] =(char) 0x20; //пробел else break; } Edit1->Text=buff; }
|
|
|
Записан
|
Как говориться, cемь бед - один Reset
|
|
|
reconnector
Гость
|
|
« Ответ #34 : 14-04-2005 16:00 » |
|
Круто работает еще вопрос делаю поиск файлов и вывод в Memo Memo1->Lines->Add(FindFile.cFileName); 1) когда список большой он в мемо не влазит как поступить ? 2) а как правильно искать чтоб находить тока файлы ? я ищу вот так HANDLE hFsearch=FindFirstFile("c:\\*.*", &FindFile); но так находит и файлы и папки
|
|
« Последнее редактирование: 14-04-2005 19:13 от reconnector »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #35 : 14-04-2005 19:27 » |
|
У тебя в FindFile есть поле dwFileAttributes. Делай отсев. т.е. if (FindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ........; //Это папка else ......................................................................................; //Все остальное
Кстати, для продолжения поиска ты вызываеш FindFirstFile?
|
|
« Последнее редактирование: 14-04-2005 19:31 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
reconnector
Гость
|
|
« Ответ #36 : 15-04-2005 19:01 » |
|
Да вызываю ......... 1) А как получить имя первого найденного файла ?
2)и можно ли посчитать нажатие кнопки тоесть я нажимаю 1 раз получаю список файлов нажимаю еще 1 раз получаю опять тот же список как продолжение старого Как узнать что кнопка была нажата и на второй раз не произвести ни каких дейстивий ?
|
|
« Последнее редактирование: 15-04-2005 19:08 от reconnector »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #37 : 15-04-2005 19:22 » |
|
reconnector, Как ты дружиш с английским? 1. The WIN32_FIND_DATA structure describes a file found by the FindFirstFile or FindNextFile function.
typedef struct _WIN32_FIND_DATA { // wfd DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[ MAX_PATH ]; TCHAR cAlternateFileName[ 14 ]; } WIN32_FIND_DATA;
Members
dwFileAttributes
Specifies the file attributes of the file found. This member can be one or more of the following values:
Value Meaning FILE_ATTRIBUTE_ARCHIVE The file is an archive file. Applications use this value to mark files for backup or removal. FILE_ATTRIBUTE_COMPRESSED The file or directory is compressed. For a file, this means that all of the data in the file is compressed. For a directory, this means that compression is the default for newly created files and subdirectories. FILE_ATTRIBUTE_DIRECTORY The file is a directory. FILE_ATTRIBUTE_HIDDEN The file is hidden. It is not included in an ordinary directory listing. FILE_ATTRIBUTE_NORMAL The file has no other attributes set. This value is valid only if used alone. FILE_ATTRIBUTE_OFFLINE The data of the file is not immediately available. Indicates that the file data has been physically moved to offline storage. FILE_ATTRIBUTE_READONLY The file is read-only. Applications can read the file but cannot write to it or delete it. FILE_ATTRIBUTE_SYSTEM The file is part of the operating system or is used exclusively by it. FILE_ATTRIBUTE_TEMPORARY The file is being used for temporary storage. Applications should write to the file only if absolutely necessary. Most of the file's data remains in memory without being flushed to the media because the file will soon be deleted.
ftCreationTime
Specifies a FILETIME structure containing the time the file was created. FindFirstFile and FindNextFile report file times in Coordinated Universal Time (UTC) format. These functions set the FILETIME members to zero if the file system containing the file does not support this time member. You can use the FileTimeToLocalFileTime function to convert from UTC to local time, and then use the FileTimeToSystemTime function to convert the local time to a SYSTEMTIME structure containing individual members for the month, day, year, weekday, hour, minute, second, and millisecond.
ftLastAccessTime
Specifies a FILETIME structure containing the time that the file was last accessed. The time is in UTC format; the FILETIME members are zero if the file system does not support this time member.
ftLastWriteTime
Specifies a FILETIME structure containing the time that the file was last written to. The time is in UTC format; the FILETIME members are zero if the file system does not support this time member.
nFileSizeHigh
Specifies the high-order DWORD value of the file size, in bytes. This value is zero unless the file size is greater than MAXDWORD. The size of the file is equal to (nFileSizeHigh * MAXDWORD) + nFileSizeLow.
nFileSizeLow
Specifies the low-order DWORD value of the file size, in bytes.
dwReserved0
Reserved for future use.
dwReserved1
Reserved for future use.
cFileName
A null-terminated string that is the name of the file.
cAlternateFileName
A null-terminated string that is an alternative name for the file. This name is in the classic 8.3 (filename.ext) filename format.
2. Объясни чуть подробнее. Первое что приходит в голову. Ставь счетчик. При каждом нажатии делай инкремент его.
Насчет продолжения поиска не понял. тоже поподробнее как ты делаеш?
Remarks
If a file has a long filename, the complete name appears in the cFileName field, and the 8.3 format truncated version of the name appears in the cAlternateFileName field. Otherwise, cAlternateFileName is empty. As an alternative, you can use the GetShortPathName function to find the 8.3 format version of a filename.
|
|
« Последнее редактирование: 20-12-2007 18:28 от Алексей1153++ »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #38 : 15-04-2005 19:27 » |
|
2. Чуть поподробней можеш объяснить. По идее ставится счетчик, при каждом нажатии просто делается инкреминирование.
И дай пожалуйста полный код, как ты производиш дальнейший поиск.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
reconnector
Гость
|
|
« Ответ #39 : 16-04-2005 16:07 » |
|
Вот : void __fastcall TForm1::Button1Click(TObject *Sender) { WIN32_FIND_DATA FindFile; HANDLE hFndF=FindFirstFile("c:\\*.*", &FindFile); DWORD Folder=FindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
if (hFndF!=INVALID_HANDLE_VALUE) { do { if (!Folder) {Memo1->Lines->Add(FindFile.cFileName ); } }
while (FindNextFile(hFndF,&FindFile)!=0); FindClose(hFndF); } }
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #40 : 16-04-2005 16:25 » |
|
Что то со скобками напутано. Из контекста выдрано?
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
reconnector
Гость
|
|
« Ответ #41 : 16-04-2005 17:04 » |
|
Да это может Тут я ео редактировал потому что у меня написано так if (hFndF!=INVALID_HANDLE_VALUE) {do{if(!Folder){Memo1->Lines->Add(FindFile.cFileName );}}while (FindNextFile(hFndF,&FindFile)!=0); FindClose(hFndF); } }
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #42 : 16-04-2005 17:41 » |
|
А чему у тебя равно Folder в цикле. Вроде ты его не изменяеш в цикле.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
reconnector
Гость
|
|
« Ответ #43 : 17-04-2005 08:03 » |
|
Folder у меня для того чтоб папки не находить а тока файлы
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #44 : 17-04-2005 17:37 » |
|
Посмотри внимательно цикл. В том виде, что ты представил на суд публики, у тебя Folder Величина постоянная. Или он тебе будет вытаскивать все, Или вообше ничего. Да вначале проги фолдер инициализируется первой встретившейся записью. А затем на протяжении цикла, она и равна первому значению. Если ты будеш смотреть диск c:\ То как правило там первая запись в каталоге это файл. Вот и ты получаеш список всего.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
reconnector
Гость
|
|
« Ответ #45 : 21-04-2005 20:23 » |
|
а как проверить что я получил первое папку или файл из каталога диска ?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #46 : 22-04-2005 16:29 » |
|
HANDLE hFndF=FindFirstFile("c:\\*.*", &FindFile); DWORD Folder; if (hFndF!=INVALID_HANDLE_VALUE) { do { Folder=FindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; if (!Folder) Memo1->Lines->Add(FindFile.cFileName ); } while (FindNextFile(hFndF,&FindFile)!=0); FindClose(hFndF); }
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
reconnector
Гость
|
|
« Ответ #47 : 23-04-2005 20:18 » |
|
как прочитать(а точнее показать внормальной кодировке ) файл Досовской кодировки в Виндовс? читал так но результат иероглифы HFILE hOpFle= _lopen("C:\\BFA.txt",OF_READ);//открываю для чтения DWORD uBtRead=1024; //char *uBuff=new char[max]; unsigned char uBuff[1024]; _lread(hOpFle,uBuff,uBtRead);//читаю в буфер
|
|
|
Записан
|
|
|
|
reconnector
Гость
|
|
« Ответ #48 : 24-04-2005 20:20 » |
|
Кому интересно hOpenF = _lopen(fBuff,OF_READ); _lread(hOpenF,unBuff,bLength); OemToCharBuff(unBuff,unObuff,bLength); Memo1->Text=unObuff; _lclose(hOpenF); так читает
|
|
|
Записан
|
|
|
|
reconnector
Гость
|
|
« Ответ #49 : 26-04-2005 17:39 » |
|
Вопрос как узнать где запустилась программа ? на каком диске в какой папке ?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #50 : 27-04-2005 12:48 » |
|
The GetCurrentDirectory function retrieves the current directory for the current process.
DWORD GetCurrentDirectory(
DWORD nBufferLength, // size, in characters, of directory buffer LPTSTR lpBuffer // address of buffer for current directory );
Parameters
nBufferLength
Specifies the length, in characters, of the buffer for the current directory string. The buffer length must include room for a terminating null character.
lpBuffer
Points to the buffer for the current directory string. This null-terminated string specifies the absolute path to the current directory.
Return Values
If the function succeeds, the return value specifies the number of characters written to the buffer, not including the terminating null character. If the function fails, the return value is zero. To get extended error information, call GetLastError. If the buffer pointed to by lpBuffer is not large enough, the return value specifies the required size of the buffer, including the number of bytes necessary for a terminating null character.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #51 : 27-04-2005 12:49 » |
|
Да кстати, длину строки на всякий случай желательно делать равной MAX_PATH
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
reconnector
Гость
|
|
« Ответ #52 : 30-04-2005 11:07 » |
|
А можно обратиться к ..... короче так событие ..........TForm1::Button1Click(TObject *Sender) { int Code;}// Можно ли из другого события обратится к этому а конкретней к переменной Code? //_____________________________________ ....... TForm1::Button2Click(TObject *Sender) {TForm1::Button1Click(Button1);} //так можно :) Наверно всетаки нельзя
|
|
« Последнее редактирование: 30-04-2005 12:55 от reconnector »
|
Записан
|
|
|
|
FoKas
Новенький
Offline
|
|
« Ответ #53 : 02-05-2011 10:23 » |
|
У меня тоже эта же ошибка,не ведаю как исправить. float maxY=-99999999999,minY=999999999,srY,maxX,minX,srX,maxZ,minZ,srZ;
for(int i=0;i<t*2;i+=2) //перебираем грани { int nachalo=sv2[i]; int v=vidimost(nachalo,sv1,buf3,p3); //видима ли грань if (v==1) //если видима то выполняем { for (int j=sv2[i];j<sv2[i+1]+1;j++) //перебираем точки грани { if(bufer[(sv1[j]-1)*4+1]>maxY) //находим точку с макс. коор.У { maxY=bufer[(sv1[j]-1)*4+1]; maxX=bufer[(sv1[j]-1)*4+0]; maxZ=bufer[(sv1[j]-1)*4+2]; } if(bufer[(sv1[j]-1)*4+1]<minY) //Находим точку с мин.коор.У { ---//-- minY=bufer[(sv1[j]-1)*4+1];//<-----------------тут ошибка minX=bufer[(sv1[j]-1)*4+0]; minZ=bufer[(sv1[j]-1)*4+2]; } }
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #54 : 02-05-2011 11:10 » |
|
FoKas, покажи определение buffer. И что за хрень у тебя на предыдущей ошибке строке?... Это не SQL - такой комментарий недопустим.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
FoKas
Новенький
Offline
|
|
« Ответ #55 : 02-05-2011 11:51 » |
|
FoKas, покажи определение buffer. И что за хрень у тебя на предыдущей ошибке строке?... Это не SQL - такой комментарий недопустим.
Ты прав,из-за этого "комментария" ничего не работало.Я как-то не подумал,когда его поставил)))) Теперь запускается
|
|
|
Записан
|
|
|
|
|