하드 디스크의 FAT32 항목을 읽는 중이고 CreateFile
, ReadFile
및 SetFilePointer
개의 API를 사용하여 항목을 읽는 데 성공했습니다. 지금까지 (C#으로 작성된) 제 코드가 있습니다.FAT32를 읽기위한 C#의 저수준 C++ 스타일 I/O
--- DLL을 수입 -----
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, Int32 dwDesiredAccess,
Int32 dwShareMode, Int32 lpSecurityAttributes, Int32 dwCreationDisposition,
Int32 dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("kernel32.dll")]
static extern bool ReadFile(IntPtr hFile, byte[] lpBuffer,
uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, uint lpOverlapped);
[DllImport("kernel32.dll")]
extern static int SetFilePointer(IntPtr hFile, int lDistanceToMove, int lpDistanceToMoveHigh, uint dwMoveMethod);
[DllImport("kernel32.dll")]
extern static Boolean CloseHandle(IntPtr hObject);
------ CODE ---- 모든 .NET 응용 프로그램에서 작동 ---------
는 int ret, nread;
IntPtr handle;
int s = 512;
byte[] readbuffer = new byte[512];
IntPtr ptr = CreateFile(@"\\.\F:", -1073741824, 3, 0, 3, 128, IntPtr.Zero);
if (ptr != System.IntPtr.Zero)
{
int i = 100;
int ret = SetFilePointer(ptr, 0, 0, 0);
ret = SetFilePointer(ptr, 4194304, 0, 1);
while (true)
{
byte[] inp = new byte[512];
uint read = 0;
if (ret != -1)
{
ReadFile(ptr, inp, 512, out read, 0);
for (int k = 0; k < 16; k++)
{
string s = ASCIIEncoding.ASCII.GetString(inp, k*32, 11);
if (inp[k*32] == 0xE5)
{
MessageBox.Show(s);
}
}
//ret = SetFilePointer(ptr, 512, 0, 1);
}
}
}
위의 코드는 F:\
드라이브를 읽고 시험을 위해 나는 각각의 파일 항목을 통해 첫 번째 파일 디렉토리 클러스터 및 쿼리를 읽고이 삭제 된 경우 파일 이름을 표시하는 데 만들었습니다.
그러나 필자는 바이트 배열을 자주 사용하고 FAT32 사양에 따라 지정된 데이터 구조에 매핑해야하는 본격적인 응용 프로그램으로 만들고 싶습니다.
데이터를 읽고있는 바이트 배열을 어떻게 효율적으로 사용할 수 있습니까? 나는 파일 스트림과 BinaryReader를 사용하여 동일한 코드를 시도하고 그러나 지금은 내가 C#에서 유사한 데이터 구조를 갖고 싶어
struct bios_data
{
byte id[3];
char name[11];
byte sectorpercluster[2];
...
}
같은 C 구조 무언가를 가지고 가정, 작동 나는 바이트 배열에 데이터를 읽을 때 구조에 매핑하고 싶습니다. 나는 많은 옵션을 시도했지만 완전한 해결책을 얻지 못했습니다. 나는 클래스를 만들려고 시도하고 직렬화도하지만 그것도 작동하지 않았다. 나는 FAT 항목에서 데이터를 읽으면서 내가 사용하게 될 theese와 같은 구조가 3 개 더있다. 원하는 결과를 얻으려면 어떻게해야합니까?
나는 질문을 할 때 다음과 같은 질문을하고 싶습니다. 본질 (구조체와 바이트 배열을 변환하는 방법)을 물어보고 모든 불필요한 것들을 제거하십시오. 사람들은 텍스트 나 특히 제목과 태그 모두에서 질문이 FAT32 또는 뭔가에 관한 것 같기 때문에 대답하지 않거나 읽지 않을 것입니다. 이 질문을 편집 할 수도 있습니다. 내가 호기심이 많기 때문에 나는 그것을 단지 완전히 읽었다. – OregonGhost
오레곤 고스트에 대한 귀하의 vaulable 입력,하지만 scenaio 내가 많은 쿼리를했고 나는 전체 코드를 보낼 현명한 것이라고 생각했다, 당신은 내 질문을 더 나은 여기에 나를 도울 수 있습니까? –