¿Cómo puedo encontrar la cantidad real de espacios libres en el directorio de archivos en una carpeta FAT32?

1

Entiendo que hay aprox. 64K posibles archivos en una carpeta FAT32. Esto supone nombres de archivo 8.3. Los nombres de archivo más largos ocupan múltiples ranuras. Por lo tanto, es difícil saber cuántas entradas de directorio reales se están utilizando.

He encontrado este límite de vez en cuando debido a los nombres de archivo largos, no a la gran cantidad de archivos. ¿Hay alguna manera de que sepamos el número real de espacios libres en el directorio de archivos en una carpeta?

Paul Emmons
fuente

Respuestas:

1

No conozco ninguna herramienta que le permita contar el número de "ranuras" de entrada de catálogo de directorio en uso o disponibles en una carpeta FAT32. Un buen caballero llamado Udi Cohen tiene una utilidad C ++ para ordenar nombres de archivos en fat32, y es posible que pueda definir una clase que le permita enumerar u obtener un recuento de estas entradas

La limitación la establece el sistema de archivos. FAT32 puede tener 65.536 entradas. Cada archivo y subdirectorio toma de dos a trece entradas, dependiendo de la longitud de su nombre.

La especificación FAT32 está disponible aquí: http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx

Proporciona detalles sobre todo, incluida la estructura del directorio y la forma en que los nombres largos de archivo (LFN) se almacenan en los directorios.

Básicamente, hay una entrada de directorio que siempre contiene la versión corta (8.3) del nombre del archivo. Si el nombre real no se ajusta a ese molde, habrá de una a doce entradas más, cada una de las cuales contiene 13 bytes del nombre completo. Entonces, un archivo llamado "veryverylongname.txt" tomaría tres entradas. El primero tendría el nombre corto, algo así como "veryve ~ 1.txt", el segundo tendría "veryverylongn" y el tercero tendría "ame.txt".

G Koe
fuente
¡Gracias! Con esta información, debería ser posible escribir un programa en Perl o similar, que solo lea una lista de directorio y calcule el número de entradas utilizadas a partir de las longitudes de los nombres de archivo. No es necesario ir a bajo nivel.
Paul Emmons
¿Cómo se ve esto: #input desde dir / b while ($ ln = <>) {chop $ ln; $ nfiles ++; $ dot = ""; $ base = ""; $ ext = ""; $ ln = ~ /([^.font>*)(\.)(.*)/; $ base = $ 1; $ punto = $ 2; $ ext = $ 3; $ baselen = longitud ($ base); $ extlen = longitud ($ ext); if ($ baselen> 8 || $ extlen> 3 || $ ext = ~ /\./) {$ totlen = $ baselen + $ extlen + length ($ dot); $ nent + = int ($ totlen / 13); $ nent ++ if ($ totlen% 13> 0); }} $ nent + = $ nfiles; $ rem = 65536- $ nent; print "Los nombres de archivo $ nfiles ocupan entradas de directorio $ nent. Quedan entradas $ rem";
Paul Emmons