SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: elmer.entenza en Viernes 17 de Septiembre de 2010, 17:55
-
Saludos. Necesito implementar una función en C (aunque el cuerpo sea en ensamblador) pero que devuelva en una variable (por referencia o directo, no importa la vía) el contenido de un sector del disco o de una memoria flash.
-
Usa CreateFile() con una ruta UNC completa (en la documentación de la MSDN de CreateFile, en la parte de discos físicos y volúmenes está qué es eso: http://msdn.microsoft.com/en-us/library/aa363858(VS.85 (http://msdn.microsoft.com/en-us/library/aa363858(VS.85" onclick="window.open(this.href);return false;)).aspx
Eso sí, necesitas los permisos adecuados para hacerlo.
-
Amigo rfrog, me hubiera gustado mucho revisar lo que dices, pero el link no se me mostró accesible... me da el siguiente error...
Unable to Service Request
si tienes algo más... te lo agradecería.
-
Click aca (http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx) para el link que dejo rfog.
-
Al parecer está buena la función esa. Tengo una de preguntas ahora..
En mi caso todo lo que quiero es hacer un simple programita que en FAT32 recupere un fichero que ha sido lógicamente borrado. Es decir, lo que quiero es recorrer, la estructura de la FAT y cambiar la marca de fichero borrado. Quiero además hacer esto en una tarjeta SD o una momoria flash, porque no me aceptan que lo haga en disketes por ser algo obsoleto
¿Cómo puedo acceder para leer una memoria con la función esa CreateFile? En este tema estoy severamente perdido.
Atentamete, Gracias.
-
Despues de tener un HANDLE al volumendisco en cuestion usas ReadFile.
-
Y WriteFile luego para guardar el sector modificado, pero antes tienes que retroceder a la misma posición en la que leiste el sector.
-
Muchas gracias colegas... Las funciones que me recomendaron salvaron toda la situación.. Las usé así..
byte[] data = new byte[count];
int n = 0;
IntPtr handle = CreateFile("F", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
fixed (byte* p = data)
{
if (!ReadFile(handle, p, count, &n, 0))
Console.WriteLine("Error de lectura en el medio");
}
if (n > 0)
{
MemoryStream memStream = new MemoryStream(data);
return memStream;
}
Ahora tengo un último problema cuando estoy leyendo en la flash solo puedo leer a partir del comienzo de la misma... y para eso cuando quiero leer un cluster cerca del final, tengo que leer casi toda la superficie de la momoria...
Cuando se trataba de los primeros 10 Mbytes más o menos no dio problemas pero más allá simplemente no funciona...
Cómo puedo realizar un offset antes, al handle tal vez??? para luego solo leer el tamanno de un cluster... sin lios...
esto es lo único que me falta... para terminar..
-
Muévete directamente a donde quieras con SetFilePointer()
http://msdn.microsoft.com/en-us/library ... 41(v=VS.85 (http://msdn.microsoft.com/en-us/library/aa365541(v=VS.85" onclick="window.open(this.href);return false;)).aspx