Improve company productivity with a Business Account.Sign Up

x
?
Solved

File Size

Posted on 1998-12-31
11
Medium Priority
?
371 Views
Last Modified: 2010-04-04
How can I find the file size of an image file and display the size in say a Label Caption?
I am using a FileListBox to click on to Open the File.
Using Delphi4.
Have tried the function in the help section but hangs up when trying to open a file previously opened.
0
Comment
Question by:xpher
  • 6
  • 5
11 Comments
 
LVL 1

Author Comment

by:xpher
ID: 1353910
Edited text of question
0
 
LVL 20

Accepted Solution

by:
Madshi earned 200 total points
ID: 1353911
Hi xpher,

function fio_GetFileSize(const FileName: string) : int64;
var Handle   : THandle;
    FindData : TWin32FindData;
begin
  Handle:=FindFirstFile(PChar(FileName),FindData);
  if Handle<>INVALID_HANDLE_VALUE then begin
    Windows.FindClose(Handle);
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)=0 then begin
      result:=(int64(FindData.nFileSizeHigh) shl 32)+int64(FindData.nFileSizeLow);
      exit;
    end;
  end;
  result:=-1;
end;

Regards, Madshi.

Hmm. On the other side: Why is the file still open? You should check this, because it's not very clean to leave a file open for a long time...
0
 
LVL 1

Author Comment

by:xpher
ID: 1353912
Thanks Madshi it works great. Only problem now is to try and understand it.
I think my original problem was that I was naive enough to think that clicking on another file would automatically close down the other. I'll have to investigate how to close the image before opening another.

Thanks again
Chris:))

ps Happy New Year
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
LVL 20

Expert Comment

by:Madshi
ID: 1353913
Happy new year...  :-)

Hmm. How do you open the image files? Perhaps I can then tell you how to close them again...

Regards, Madshi.
0
 
LVL 1

Author Comment

by:xpher
ID: 1353914
Hi Madshi
Thanks for comment.

I open the image files by clicking on the file name in the file list box.

procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(FileListBox1.Filename);
end;

This all works fine until I try the function for file size shown in Delphi help as mentioned earlier.

Many thanks for helping. Look forward to a reply.

Regards
Chris :))
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1353915
Hi Chris,

hmmm. I don't understand it. Here's the source from Delphi4, that is called when you call Image1.Picture.LoadFromFile. It should be the same code with Delphi2/3:

procedure TGraphic.LoadFromFile(const Filename: string);
var
  Stream: TStream;
begin
  Stream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);
  try
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

So with "Stream.Free" the file is properly closed again. So I really don't understand why you've had problems with the other filesize function.
Could you please (1) tell me the name of the other function and (2) try to call it before loading the image? Does it work, then?

Regards, Madshi.
0
 
LVL 1

Author Comment

by:xpher
ID: 1353916
Hi Madshi
Thanks for comment.

I open the image files by clicking on the file name in the file list box.

procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(FileListBox1.Filename);
end;

This all works fine until I try the function for file size shown in Delphi help as mentioned earlier.

Many thanks for helping. Look forward to a reply.

Regards
Chris :))
0
 
LVL 1

Author Comment

by:xpher
ID: 1353917
Hi Madshi
Thanks for comment.

I open the image files by clicking on the file name in the file list box.

procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(FileListBox1.Filename);
end;

This all works fine until I try the function for file size shown in Delphi help as mentioned earlier.

Many thanks for helping. Look forward to a reply.

Regards
Chris :))
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1353918
Hmmm. Are you stuttering?    :-)
0
 
LVL 1

Author Comment

by:xpher
ID: 1353919
oops! don't know what happened seems to have posted comments again sorry. ignore last two.

In response to your last comment, the function name I was trying to use was FileSize. In the help section it gives FileSize, Seek, FilePos Example. I had tried butchering this to just use file size. I've now tried again and realised that I forgot the last line to close the file.

This is what I have ended up with (from D4 help) and it works now placing FileSize into a Label Caption:

procedure TForm1.FileListClick(Sender: TObject);
  var
   f: file of Byte;
   size : Longint;
   S: string;

 begin
     AssignFile(f, FileList.FileName);
     Reset(f);
     size := FileSize(f);
     S := 'File size in bytes: ' + IntToStr(size);
     Seek(f,size div 2);
     CloseFile(f);
 begin
   Image1.Picture.LoadFromFile(FIleList.Filename);
   Label1.Caption := s;
   end;
 end;

 Many thanks for all your help and getting me to think. Hope to communicate again.

Cheers
Chris :-))
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1353920
:-)

See you...

Regards, Madshi.
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
The video will let you know the exact process to import OST/PST files to the cloud based Office 365 mailboxes. Using Kernel Import PST to Office 365 tool, one can quickly import numerous OST/PST files to Office 365. Besides this, the tool also comes…
Watch the video to learn how one can deal with PST file corruption issue with an outstanding Kernel for Outlook PST Repair Tool easily. Using this tool, non-technical users can swiftly perform the repair process to restore their essential data witho…

595 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question