copiar fichero mas de 2Gb con esta funcion
Hola amigos, utilizo esta clasica *funcion para copiar un fichero con cierta perioridad, y ha estado funcionando perfectamente hasta que el fichero ha sobrepasdo las 3Gb no me copia mas de 2.033.000, hasta en un fichero de 18Gb solo me copia las 2 primeras..........
He probado en la condicion del bucle a poner Código:
While not Eof(Origen) do Que puedo hacer para copiar ficheros de mas de 2Gb con barra de proceso......xq con CopyFile se copia bien pero tiene el incoveniente que deja la aplicacion frita mientras copia...... *funcion: Código:
procedure TForm1.copiarConProgreso(ArchivoOrigen, ArchivoDestino: String); |
Si no me equivoco, 2GB es aproximadamente lo que puede representarse con un integer que es el tipo de datos de la propiedad Max del ProgressBar. No sé si no te copia todo el archivo o simplemente no queda bien la barra. En tal caso deberás hacer una escala para que quede bien.
// Saludos |
¡Ah! Ya veo. Además de la barra de progreso sí tienes problemas en la copia ya que usas un LongInt para la longitud del archivo y LongInt viene a ser lo mismo que el integer. Puedes cambiar por un LongWord, lo que te doblará la capacidad, o mejor un Int64.
// Saludos |
Je, je, otro problema: FileSize regresa un integer :)
Supongo que te puedes arreglar directamente con la función GetFileSize de la API Windows. // Saludos pd: no tengo a la mano un archivo tan grande como para probar :( |
Hola,
¿Porqué no pruebas con la función "CopyFileEx" o con la función "ShFileOperation"? En el caso de esta última quedaría más o menos como sigue, de tal modo que se muestre una ventana de progreso mientras se copia el archivo y además la interfaz de tu aplicación no se vea "retenida".
|
Una peqeña acotación...con 32 bits en un entero se alcanza a 4 GB
|
No exactamente. Un Integer tiene signo y por ello va de -2GB a 2GB. Por ello mencioné que al usar LongWord (integer sin signo) doblaría la capacidad.
// Saludos |
Eso es correcto, asumía q ya hablabas de un unsigned, para desplazamientos es lo mejor
|
La franja horaria es GMT +2. Ahora son las 14:40:12. |
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