C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47769] 드라이브 정보를 읽어 올 때.....
가시고기 [pelican7] 1169 읽음    2007-01-16 13:44
안녕하세요.....
드라이브 정보를 읽어서 보여주려고 합니다.
아래와 같이 작성을 하여서 보여주고 있는데... 간혹가다가
USB 연결되었다가 제거되거나 그럴 경우에 드라이브 정보를 찾으려고 시도하면서
다시시도, 취소, 무시, 이런 형태의 메세지를 계속 보내는 경우가 있습니다.
왜 그런 문제가 생기는지 자세히 모르겠네요.
혹시 아시는 분은 설명좀 부탁드립니다.   

    nType = 0;
        char FileSysName[10] = {0,};
        char VolName[33] = {0,};
        char *driveInfo[26];
        AnsiString sDriveList, sDriveList2, sDriveList3, sDriveList4;

        ::GetLogicalDriveStrings(sizeof(driveNames), driveNames);

        // combo_Hdd->Clear();
        lv_sysinfo_hdd->Clear();

        for(int i=0; i<25; i++)
        {
            for(int j=0; j<4; j++)
            //for(int j=0; j<10; j++)
            {
                drive[i] = drive[i] + driveNames[i*4 + j];
            }

            char *cp = drive[i].c_str();
            char *cp2 = strtok(cp, " \t\n" ); // cp may no longer be valid
            char *cp3 = "A:\\";
            char *cp4 = "a:\\"; // cp may no longer be valid

            sDriveList = "";
            sDriveList2 = "";
            sDriveList3 = "";
            sDriveList4 = "";

            // Get Free Size of Disk

            if(cp2 != NULL)
            {
                nType = ::GetDriveType(cp2);

                if((nType == 3) || ((nType == 2) && (*cp2 != *cp3) && (*cp2 != *cp4)))
                {
                    GetVolumeInformation(cp2, VolName, sizeof(VolName), NULL, NULL, NULL, FileSysName, sizeof(FileSysName));

                    sDriveList = VolName;
                    sDriveList = sDriveList + " (" + driveNames[i*4] + ":)";

                    sDriveList2 = FileSysName;

                    // Get Free Space of Harddisk
                    ::GetDiskFreeSpaceEx(cp2, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, &TotalNumberOfFreeBytes);

                    FreeSpace = (FreeBytesAvailableToCaller.HighPart << 12) | (FreeBytesAvailableToCaller.LowPart >> 20);
                    TotalSpace = (TotalNumberOfBytes.HighPart << 12) | (TotalNumberOfBytes.LowPart >> 20);
                    // end
                  
                    if(TotalSpace > 1000)
                    {
                        sDriveList3 = (AnsiString)(TotalSpace / nDevideSize);
                        sDriveList3 = sDriveList3 + " G ";
                    }
                    else
                    {
                        sDriveList3 = (AnsiString)TotalSpace;
                        sDriveList3 = sDriveList3 + " M ";
                    }

                    sDriveList4 = (int)(((float)(TotalSpace - FreeSpace) / (float)TotalSpace) * 100);
                    sDriveList4 = sDriveList4 + " %";

                    itemSub = lv_sysinfo_hdd->Items->Add();  //AddItem(sDriveList, Sender);
                    itemSub->Caption = sDriveList;
                    itemSub->SubItems->Add(sDriveList2);
                    itemSub->SubItems->Add(sDriveList3);
                    itemSub->SubItems->Add(sDriveList4);
                }
                nDriveNum++;
            }
            else
            {
                break;
            }
            //time_HDD = 1;
        }

+ -

관련 글 리스트
47769 드라이브 정보를 읽어 올 때..... 가시고기 1169 2007/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.