FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
como asignar el tamaño a un fichero aunque este sea de 0 kb
Necesito saber como mandar a copiar un archivo y que cuando se cree la copia ya tenga el tamaño del archivo ya asignado aunque este todavía no este totalmente copiado.
|
#2
|
||||
|
||||
Mmmhh... Como yo lo veo no hay mucha alternativa...
El sistema va copiando y actualizando a medida que uno escribe, así que si querés que el archivo tenga el tamaño "final" vas a tener que copiar todo. Así lo he visto en otros programas, el archivo mide 15 MB, pero si por ejemplo sólo se bajaron 20 KB, entonces tenés un archivo con un montón de 00 adentro. Es decir que el programa escribió todos eses ceros antes de escribir los datos (o tiene un buffer que se llena con ceros y con los datos y pues, al guardar a disco guarda todo el buffer). No me parece que haya manera de hacer lo que querés sin hacer esto de rellenar con ceros... ¿Qué es exactamente lo que estás haciendo? Por ahí podemos llegar a alguna solución. Saludongos. |
#3
|
|||
|
|||
Men, estoy haciendo un copiador, y lo que necesito es saber como reservar el espacio para cada archivo, antes de empezar a copiar.
|
#4
|
||||
|
||||
Realmente si se puede, dependiendo del sistema de Archivo. La API de NTFS hace esto. Normalmente esta técnica es utilizada para hacer discos virtuales. Creo que deberías buscar en MSDN al respecto.
|
#5
|
|||
|
|||
men donde puedo encontrar informacion de esto.
|
#6
|
||||
|
||||
La función chsize del C te permite cambiar el tamaño de un archivo a voluntad.
El siguiente ejemplo crea un archivo y le da un tamaño de 2000 bytes: Código:
#include <io.h> #include <fcntl.h> void __fastcall TForm1::Button4Click(TObject *Sender) { int f = open("temp.txt", O_CREAT | O_WRONLY); chsize(f, 2000); close(f); } Saludos. |
#7
|
||||
|
||||
Con la API de Windows permite realizar la misma operación que chsize reservando tamaño incluso mayor que 4.294.967.295 bytes. En este caso no disponemos de una función directa, así que propongo una como esta:
Código:
BOOL SetFileSize(char* FileName, __int64 Size) { bool Result = false; LONG Hi = LONG(Size >> 32); DWORD Attributes = GetFileAttributes(FileName); if(Attributes == -1) Attributes = FILE_ATTRIBUTE_NORMAL; SetFileAttributes(FileName, FILE_ATTRIBUTE_NORMAL); HANDLE hFile = CreateFile(FileName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH, 0); if(hFile != HANDLE(-1)){ if(SetFilePointer(hFile, (LONG)Size, &Hi, FILE_BEGIN) != INVALID_SET_FILE_POINTER){ Result = SetEndOfFile(hFile); } CloseHandle(hFile); } SetFileAttributes(FileName, Attributes); return Result; } Saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
como saber el tamaño de un fichero | kenychy | C++ Builder | 13 | 19-11-2010 16:46:59 |
¿Cómo puedo saber el tamaño que debo asignar al buffer? | MON___ | API de Windows | 5 | 02-02-2008 22:08:02 |
Como controlar el tamaño de un fichero subido al servidor | lazar | PHP | 7 | 06-03-2007 01:27:22 |
Como asignar el tamaño de papel en QuickRep?? | AndGaG | Impresión | 2 | 02-07-2006 21:51:12 |
Obtener Todo El Registro De Una Tabla Aunque Aunque Este Agrupado Por 2 Campos | agova | SQL | 6 | 11-08-2004 15:48:14 |
|