Cómo obtener el primer grupo de datos del directorio de FAT utilizando C # (o, al menos, C ++) y Win32API?

StackOverflow https://stackoverflow.com/questions/2704277

Pregunta

Así que tengo una unidad FAT, digamos H: y un directorio 'trabajo' (ruta completa 'H: \ work'). Necesito conseguir el número del primer grupo de ese directorio. El número de la primera clúster es 2-bytes de valor, que se almacena en el 26 y 27 bytes de la entrada; carpeta (wich es de 32 bytes).

Digamos que estoy haciendo con el archivo, no es un directorio. Puedo usar un código como este:

 static public string GetDirectoryPtr(string dir)
    {

        IntPtr ptr = CreateFile(@"H:\Work\dover.docx",
            GENERIC_READ,
            FILE_SHARE_READ | FILE_SHARE_WRITE,
            IntPtr.Zero,
            OPEN_EXISTING,
            0,//FILE_FLAG_BACKUP_SEMANTICS, 
            IntPtr.Zero);
        try
        {
            const uint bytesToRead = 2;
            byte[] readbuffer = new byte[bytesToRead];
            if (ptr.ToInt32() == -1) return String.Format("Error: cannot open direcotory {0}", dir);
            if (SetFilePointer(ptr, 26, 0, 0) == -1) return String.Format("Error: unable to set file pointer on file {0}", ptr);

            uint read = 0; // real count of read bytes
            if (!ReadFile(ptr, readbuffer, bytesToRead, out read, 0)) return String.Format("cant read from file {0}. Error #{1}", ptr, Marshal.GetLastWin32Error());                
            int result = readbuffer[0] + 16 * 16 * readbuffer[1];
            return result.ToString();//ASCIIEncoding.ASCII.GetString(readbuffer);

        }
        finally
        {
            CloseHandle(ptr);
        }
    }

y volverá algún número, al igual que 19 (bastante real para mí, este es el único archivo en el disco).

Pero no necesito un archivo, necesito una carpeta. Así que estoy Puttin FILE_FLAG_BACKUP_SEMANTICS parámetro para la llamada CreateFile ... y no saben qué hacer a continuación. ¿Hay alguna forma para que funcione de una carpeta?

MSDN es muy clara en este tema http : //msdn.microsoft.com/en-us/library/aa365258 (v = VS.85) .aspx

Me suena como: "No hay ninguna manera se puede obtener un número de primer cluster de la carpeta". Lo más desesperado es que mi tutor dijo Smth como "Usted va a obtener tal o usted no superar este curso". La verdadera razón por la que está tan seguro de que esto es posible, se debe a que durante 10 años (o puede ser más) que recibió primer número de clusters de la carpeta como un hash de Addres de la carpeta (y yo era tan estúpido como para señalar esto a él, por lo que ahora No puedo hacerlo de la misma manera)

PD: Esta es la tarea más spupid que he tenido !!! Este valor no se utiliza realmente anythere en el programa, sólo se fcking número entero sin sentido.

¿Fue útil?

Solución

Así que si he entendido bien, que desea leer la grasa y conseguir el primer grupo de un directorio en el disco?

Si lo anterior es correcto, entonces tal vez sería mejor para abrir el volumen para acceso directo.
http://msdn.microsoft.com/en-us /library/aa363858(VS.85).aspx
Vea la sección de discos y volúmenes Phystical.

Una vez que tenga el volumen abrir a continuación, puede leer los sectores del disco y escanear el FAT para localizar la entrada para el directorio en el que está interesado.

Este es un ejemplo de la utilización de DeiceIoControl para leer la geometría del disco. http://msdn.microsoft.com/en-us /library/aa363147(VS.85).aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top