PDA

Ver la Versión Completa : determinar el tamaño de una fichero


lmpadron
14-11-2011, 18:39:40
Hola amigos

tengo una BD en MySQL y necesito que mi soft cargue una imagen, eso lo logre hacer bien, sin embargo el MySQL me da un error diciendome que el maximo que acepta de envio es 512 kb max_allowed_packet como no puedo cambiar el MySQL necesito que al momento de cargar la imagen pueda determinar si es mayor o no de ese tamaño para evitar un error de SQL, en estos momentos uso un OpenDialog para cargar la imagen.

La pregunta en concreto es:

Como puedo determinar el tamaño de una fichero X usando el OpenDialog.

Gracias de antemano

Chris
14-11-2011, 18:45:49
Utiliza la función de Sizeof de la clase TFileStream. Ejemplo:

var
Archivo: TFileStream;
begin
if OpenDialog1.Execute then
try
Archivo := TFileStream.Create(OpenDialog1.Filename, {segundo parámetro*});
Archivo.Sizeof // <-- esta función te da el tamaño en bytes del archivo elegido.

// ... guardar el archivo en la DB si el tamaño es adecuado.
finally
Archivo.Free;
end;


* No recuerdo el nombre del segundo parámetro de constructor. Sé que es para determinar el modo de acceso al archivo. Consulta la ayuda de Delphi al respecto.

Saludos,
Chris

lmpadron
14-11-2011, 18:49:43
Utiliza la función de Sizeof de la clase TFileStream.

ok jajja Gracias mi amigo pero primero tengo que ver como convierto tu codigo c++ jejeje pero igual es una idea excelente voy a ver si lo logro !!! gracias

ecfisa
14-11-2011, 19:06:34
Hola.

Otra opción:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TSearchRec sr;
if(OpenDialog1->Execute()){
FindFirst(OpenDialog1->FileName,faArchive, sr);
ShowMessage(OpenDialog1->FileName+" Size:"+IntToStr(sr.Size /1024)+ "Kb.");
}
}


Y creo que la traducción de la sugerida por Chris sería:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
TFileStream *FStream;
if(OpenDialog1->Execute()) {
FStream = new TFileStream(OpenDialog1->FileName, fmOpenRead);
ShowMessage(OpenDialog1->FileName+" Size:"+IntToStr(FStream->Size /1024)+ "Kb.");
delete FStream;
}
}


Un saludo.

lmpadron
14-11-2011, 20:37:02
Gracias amigos

Antes de ver el post de ecfisa me entretuve en tratar de llevar de delphi a c++ el del amigo Chris y me quedo algo asi


TFileStream *File = new TFileStream(OpenDialog1->FileName, fmOpenRead);
if (File->Size >= 600000)
{
MIS OPCIONES
delete File;
}


Gracias por su ayuda

escafandra
14-11-2011, 23:04:27
También puedes ojear este tema en C++: Obtener tamaño fichero grande (http://clubdelphi.com/foros/showthread.php?t=68399). ;)


Saludos.