Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema leyendo la FAT32 (https://www.clubdelphi.com/foros/showthread.php?t=94565)

bpesoj 06-04-2020 17:00:28

Problema leyendo la FAT32
 
Hola,
Me dirijo al Foro, a ver si alguien puede ayudarme. Estoy añadiendo a un programa para guardar y localizar rapidamente las fotos que voy escribiendo la posibilidad de recuperar archivos perdidos (borrados, o como sea) de una unidad, por lo general USB y tambiés por lo general, con FAT32.

Con ayuda de un ejemplo de D. Seoane (Gracias!) he llegado a encontrar el directorio de un archivo dado, en la FAT, y me he encallado al ir a leer lo que se puede llamar la «entrada de la FAT» correspondiente al primer cluster del archivo, en la cual tiene que estar el número del «siguiente cluster del sector de datos» si no se acabó en el primero. Para ello, sigo las instrucciones de (no puedo poner enlaces, lo siento) que indican que dado un número de cluster, su entrada en la matriz de la FAT viene dada por: (N es el cluster)

FATOffset = N * 4;
ThisFATEntOffset = REM(FATOffset / BPB_BytsPerSec); // REM es el residuo de la división

Sin embargo, el ThisFATEntOffset no es un índice correcto en la matriz de la FAT ya que lo que leo desde aquella dirección no forma parte del archivo (y sí de otro, evidentemente).

Quedaría muy agradecido si alguien de aquí, que sois muy buenos, pudiera echarme un cable, a ver en qué dirección tengo que buscar el siguiente cluster.

Saludos cordiales.

bpesoj 14-04-2020 19:49:45

Hola,
Me respondo:
He encontrado (lo siento, no puedo poner enlaces) que la dirección al siguiente pedazo del archivo se encuentra:
Código Delphi [-]
Fat_Begin:=512 + (BootSector.RsvdSecCnt-1) * BootSector.BytsPerSec;
cluster:=FAT_Begin + (cluster_actual*2);
index:=((cluster) mod (BootSector.BytsPerSec));
cluster:=FAT^[index] and $0fffffff;
BootSector es un record con la info del sector inicial y FAT un puntero a una matriz de Cardinal.
No se si es del todo correcto, pero la verdad es que funciona perfectamente.



Saludos cordiales

Casimiro Notevi 14-04-2020 22:12:09

Puedes poner enlaces "camuflados" y algún moderador los editará para que sean activos.
EJemplo: ttps://www.clubdelphi.com

escafandra 15-04-2020 01:05:02

Quizás sean de tu interés estos temas:
Vacunar disco (FAT32) contra un "AUTORUN.INF" malicioso (Seoane)
Trabajar con la FAT32 (o como vacunar un disco extraible) (Seoane)
Trabajando con FAT16 y FAT32 (escafandra)


Saludos.

bpesoj 26-04-2020 22:16:43

Cita:

Empezado por Casimiro Notevi (Mensaje 536713)
Puedes poner enlaces "camuflados" y algún moderador los editará para que sean activos.
EJemplo:


Gracias, lo sabré para otra ocasión.


Cita:

Empezado por escafandra (Mensaje 536715)
Quizás sean de tu interés estos temas:

Saludos.

De aquí saqué la mayor parte de la información. Gracias. Sois muy buenos.


La franja horaria es GMT +2. Ahora son las 19:02:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi