Exacto sergio, me he llevado 5 dias cambiando cosas menos lo que tenia que cambiar. Muchas gracias por la ayuda, ahora mismo estoy preparando un achivo de mas de 25 Gb para probar la aplicacion a tope y buscarle fallos en ese sentido.
Es un fallo clásico, siempre que un número te falle para ciertos valores altos y no para otros más bajos, es eso casi seguro.
1º ¿seria correcto o acertado que la aplicacion nada mas ejecutarse (por ejemplo en el evento onCreate del formulario) reconociera el SO y si este cumple los requisitos? y en caso de no ser asi, que mande un mensaje de error y se cierre.
Bueno, un programa tipo hacha no se qué requerimientos de SO tiene, parece que pocos... pero bueno, si quieres asegurarte de algo que se ha de cumplir, puedes hacerlo de varias formas, una opción es el onCreate, pero ojo, no puedes hacer un free en onCreate, así que quizas sea mejor tener un flag de que se ha comprobado ya, y en el onShow si ese flag es false lanzar la comprobación.
Otra opción es usar el .pas del propio proyecto y comprobarlo ANTES de cargar el formulario principal, si no cumple, avisas con un ShowMessage y matas la aplicación sin llegar a crear el form (igual si no cumple un requerimiento eso hace que el form no se pueda crear).
Recuerda que un proyecto es un .pas que se ejecuta como cualquier otro, y antes del application.start podrías comprobar cualquier cosa y si no sale bien, no ejecutas el start y en su lugar sacas un mensajito.
2º Me gustaria implementar la comprobacion de archivos corruptos usando el hash md5, tiene delphi alguna función para esto?
imagino que seria pasando el primer archivo en este caso el .001 y con eso realizaria algun tipo de calculo ¿es asi? nunca hice nada de esto del md5. He encontrado algunas funciones MD5 en google, pero no tienen mas de 15 o 20 lineas y no sé si será lo que busco.
Tienes funciones para calcular el MD5 de un fichero o stream en las Indy, por ejemplo. Son funciones sencillas, les pasas un stream, el algoritmo lo recorre entero, y te devuelve un array de bytes, con la grácia de que en el fichero cambias un solo bit, la salida cambia totalmente y se detecta sin problemas el cambio.
El MD5 lo tendrías que calcular del fichero original completo, eso te da una "huella dactilar" (una lista de bytes de una longitud fija, si quieres que sea "texto" deberías pasarle despues un algoritmo "Base64" que lo converte en texto, pero la longitud en modo texto aumenta, claro) que tendrias que añadir en tu primer fichero, de forma que el .001 lleve primero unos bytes con el MD5 y luego empieze el fichero en sí (o guardar un .MD5 y luego el .001 y siguientes, eso es más inseguro claro).
Luego, al recomponer el fichero, lees el MD5 del incio del .001, el resto del .001 es ya fichero, le añades el .002 etc., y al final terminas con un fichero de 25Gb ¿es el mismo que el original o ha pasado algo por el camino? Pues le calculas el MD5 y comparas con el que sacaste del .001, si son diferentes el fichero está corruto.