Solved

File Size

Posted on 1998-12-31
11
359 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 50 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
 
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
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

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

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…
Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

759 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now