estoy claro en cuanto a lo que el problema real es, por lo que van a echar algunas reflexiones.
- ¿Desea copias reiniciables (con tamaños de archivo tan pequeños, que no parece que sea tan importante)? Si es así, consulte CopyFileEx with COPYFILERESTARTABLE
- ¿Desea copias verificables? Parece que ya lo tienes al verificar los hashes.
- ¿Desea un mejor rendimiento? Va a ser difícil, ya que parece que no se puede ejecutar nada en el servidor. De lo contrario, TransmitFile puede ayudar.
- ¿Solo desea un fuego y olvida la operación? Supongo que desgranar a robocopy, o TeraCopy o algo funcionaría, pero me parece un poco raro.
- ¿Desea saber cuándo regresa la red? IsNetworkAlive tiene tu respuesta.
Sobre la base de lo que sé hasta ahora, creo que el siguiente pseudo-código sería mi enfoque:
sourceFile = Compress("*.*");
destFile = "X:\files.zip";
int copyFlags = COPYFILEFAILIFEXISTS | COPYFILERESTARTABLE;
while (CopyFileEx(sourceFile, destFile, null, null, false, copyFlags) == 0) {
do {
// optionally, increment a failed counter to break out at some point
Sleep(1000);
while (!IsNetworkAlive(NETWORKALIVELAN));
}
La compresión de los archivos en primer lugar le ahorra el seguimiento de los archivos que haya copiado con éxito, y que necesitas reiniciar También debería hacer que la copia sea más rápida (tamaño de archivo total más pequeño y tamaño de archivo único más grande), a expensas de cierta potencia de CPU en ambos lados. Un archivo por lotes simple puede descomprimirlo en el lado del servidor.
Eso es exactamente lo que hace BITS. – TheSmurf