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
[69141] 파일의 시작 섹터 알아내기(?)
압9정 [] 1639 읽음    2013-02-18 20:35
음... 제목이 좀 이상하네요...

어쨋든ㅋㅋ 제가 프로그램 하나를 제작중인데요.파일이 하드디스크에서 어느 섹터에 쓰였는지, 그 섹테어 쓰여져 있는 데이터는 무었

인지 알아내는 프로그램 입니당. 우선 파일이 쓰여진 섹터중에서 맨 처음 섹터를 구하고 있는데여. 생각 보다 잘 안되네요...

특정 섹터부터의 데이터를 읽어오는 것은 구현이 됬는데요.그 파일이 어느 섹터에 쓰여져 있는지를 모르겠어요.ㅠ 첨부한 사진처럼 알

고 싶어요.ㅠ 파일의 섹터정보를 알아내는 컴포넌트나 함수가 있다면 알려주세요.^^

밑에는 100번 섹터부터 2개의 섹터(1024Byte)만큼 읽어오는 프로그램 입니다.

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
typedef BOOLEAN TF;
typedef    UCHAR U8;
typedef USHORT U16;
typedef ULONG U32;
typedef ULONGLONG U64;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void ReadSector(HANDLE hVolume, U64 sector, U32 count, void* buffer)
{
    ULARGE_INTEGER offset;
    OVERLAPPED overlap = {0};
    U32 n;

    offset.QuadPart = sector * 512;
    overlap.Offset = offset.LowPart;
    overlap.OffsetHigh = offset.HighPart;
    ReadFile(hVolume, buffer, count * 512, &n, &overlap);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    unsigned char buf[1024];
    HANDLE hVolume;

    AnsiString s;
    int i, j;

    hVolume = CreateFile("\\\\.\\c:", GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE, 0,OPEN_EXISTING, 0, 0);

    ReadSector(hVolume,100,2,buf);

    for(i = 0; i < 64; i++)
    {
        for(j = 0; j < 16; j++)
        {
            s.sprintf("%.02x",buf[(i*16)+j]);
            Memo1->Lines->Strings[i] = Memo1->Lines->Strings[i]+s+" ";
        }
    }
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
69141 파일의 시작 섹터 알아내기(?) 압9정 1639 2013/02/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.