밑에 소스를 간단하게 설명 드리면 file시스템으로되어있는 데이타를 불러와서
하나의 file로 저장하는것입니다.
그런데 저장하는 진행상황을 표시하고 싶은데 file size를 어떻게 구해야할지
모르겠네여. 그리고 Progress Bar로 진행상황을 표시할려고 하는데 file이 5개 정도로 쪼개져 있어서 이것또한 난감하네여.
고수님들 보시고 한수가르쳐 주싶시요
procedure TFmExplorer.btDnldClick(Sender: TObject);
var
childOM,
SelOM: TOMItem;
Res: Integer;
mh : THANDLE;
stbuf : string;
szbuf : array [0..1024] of char;
i,
wl : longint;
FH1 : Integer;
iFileSize : Integer;
begin
if lvItemList.ItemFocused = NIL then Exit;
SelOM := TOMItem( lvItemList.ItemFocused.Data );
if SelOM = NIL then begin
my_MsgBox( '선택된 항목에 오류가 있어서 PC로 저장할 수 없습니다.' );
Exit;
end;
{$IFDEF HOLLY}
mh := CreateFile('C:Program FilesEchoDownloadTEST.MH',
GENERIC_WRITE,
FILE_SHARE_READ,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
if mh = 0 then begin
my_MsgBox( 'CreateFile(C:Program FilesEchoDownloadTEST.MH) Failed' );
Exit;
end;
StrPcopy(szbuf, SelOM.FullSubject +';'
+ IntToStr(SelOM.ItemType) + ';'
+ SelOM.MsgId);
WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);
closehandle(mh);
strpcopy(szbuf, 'C:Program FilesEchoDownload'
+ DateToStrSelOM.AttachDate));
CreateDirectory(szbuf, nil);
if SelOM.Open <> resOK then begin
my_MsgBox( 'SelOM.Open Failed' );
Exit;
end;
wl := SelOM.List.Count - 1;
for i := 0 to wl do begin
childOM := SelOM.List.Items[i];
mh := CreateFile( PCHAR('C:Program FilesEchoDownload'
+ DateToStr(SelOM.AttachDate) + 'TEST.MH'),
GENERIC_WRITE,
FILE_SHARE_READ,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
if mh = 0 then begin my_msgBox( 'CreateFile(C:Program
FilesEchoDownloadTEST.MH) Failed' );
Exit;
end;
StrPcopy(szbuf, inttostr(i) + ';'
+ SelOM.FullSubject +';'
+ IntToStr(SelOM.ItemType) + ';'
+ SelOM.MsgID + ';'
+ SelOM.Creator + ';'
+ SelOM.OrigFName + ';'
+ SelOM.MIMEType + ';'
+ IntToStr(SelOM.RawExpiryDate) + ';'
+ IntToStr(SelOM.DeferredInt) + ';'
+ IntToStr(SelOM.RawMsgFlags) + ';'
+ IntToStr(SelOM.BBAccessCount) + ';'
+ IntToStr(SelOM.ListOrder) + ';'
+ SelOM.ItemClass + ';'
+ SelOM.DirectRef + ';'
+ IntToStr(SelOM.RawMsgFlags) + ';'
+ SelOM.CCharSet + ';'
+ IntToStr(SelOM.TotalKSize) + ';'
+ SelOM.Subject + ';'
+ DateToStr(SelOM.CreateDate) + ';'
+ DateToStr(SelOM.ReplyByDate) + ';'
+ DateToStr(SelOM.AttachDate) + ';'
+ SelOM.AckId + ';'
+ IntToStr(SelOM.Size) + ';'
+ IntToStr(SelOM.AbsoluteRef) + ';'
+ IntToStr(SelOM.Flags01) + ';'
+ IntToStr(SelOM.Flags2) + ';'
+ IntToStr(SelOM.RecipId) + ';'
+ IntToStr(SelOM.RawAccessCaps) + ';');
WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);
closehandle(mh);
gUALServer.DownloadItem(childOM, 'C:Program FilesEchoDownload'
+ DateToStr(SelOM.AttachDate)
+ ''
+ 'Doc' + IntToStr(i)
+ '.dat');
end;
꼴통 wrote:
> 밑에 소스를 간단하게 설명 드리면 file시스템으로되어있는 데이타를 불러와서
> 하나의 file로 저장하는것입니다.
> 그런데 저장하는 진행상황을 표시하고 싶은데 file size를 어떻게 구해야할지
> 모르겠네여. 그리고 Progress Bar로 진행상황을 표시할려고 하는데 file이 5개 정도로 쪼개져 있어서 이것또한 난감하네여.
> 고수님들 보시고 한수가르쳐 주싶시요
>
> procedure TFmExplorer.btDnldClick(Sender: TObject);
> var
> childOM,
> SelOM: TOMItem;
> Res: Integer;
> mh : THANDLE;
> stbuf : string;
> szbuf : array [0..1024] of char;
> i,
> wl : longint;
> FH1 : Integer;
> iFileSize : Integer;
>
> begin
>
> if lvItemList.ItemFocused = NIL then Exit;
> SelOM := TOMItem( lvItemList.ItemFocused.Data );
> if SelOM = NIL then begin
> my_MsgBox( '선택된 항목에 오류가 있어서 PC로 저장할 수 없습니다.' );
> Exit;
> end;
> {$IFDEF HOLLY}
> mh := CreateFile('C:Program FilesEchoDownloadTEST.MH',
> GENERIC_WRITE,
> FILE_SHARE_READ,
> nil,
> CREATE_ALWAYS,
> FILE_ATTRIBUTE_NORMAL,
> 0);
>
>
> if mh = 0 then begin
> my_MsgBox( 'CreateFile(C:Program FilesEchoDownloadTEST.MH) Failed' );
> Exit;
> end;
> StrPcopy(szbuf, SelOM.FullSubject +';'
> + IntToStr(SelOM.ItemType) + ';'
> + SelOM.MsgId);
> WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);
> closehandle(mh);
>
> strpcopy(szbuf, 'C:Program FilesEchoDownload'
> + DateToStrSelOM.AttachDate));
> CreateDirectory(szbuf, nil);
>
> if SelOM.Open <> resOK then begin
> my_MsgBox( 'SelOM.Open Failed' );
> Exit;
> end;
>
> wl := SelOM.List.Count - 1;
> for i := 0 to wl do begin
> childOM := SelOM.List.Items[i];
> mh := CreateFile( PCHAR('C:Program FilesEchoDownload'
> + DateToStr(SelOM.AttachDate) + 'TEST.MH'),
> GENERIC_WRITE,
> FILE_SHARE_READ,
> nil,
> CREATE_ALWAYS,
> FILE_ATTRIBUTE_NORMAL,
> 0);
>
> if mh = 0 then begin my_msgBox( 'CreateFile(C:Program
> FilesEchoDownloadTEST.MH) Failed' );
> Exit;
> end;
> StrPcopy(szbuf, inttostr(i) + ';'
> + SelOM.FullSubject +';'
> + IntToStr(SelOM.ItemType) + ';'
> + SelOM.MsgID + ';'
> + SelOM.Creator + ';'
> + SelOM.OrigFName + ';'
> + SelOM.MIMEType + ';'
> + IntToStr(SelOM.RawExpiryDate) + ';'
> + IntToStr(SelOM.DeferredInt) + ';'
> + IntToStr(SelOM.RawMsgFlags) + ';'
> + IntToStr(SelOM.BBAccessCount) + ';'
> + IntToStr(SelOM.ListOrder) + ';'
> + SelOM.ItemClass + ';'
> + SelOM.DirectRef + ';'
> + IntToStr(SelOM.RawMsgFlags) + ';'
> + SelOM.CCharSet + ';'
> + IntToStr(SelOM.TotalKSize) + ';'
> + SelOM.Subject + ';'
> + DateToStr(SelOM.CreateDate) + ';'
> + DateToStr(SelOM.ReplyByDate) + ';'
> + DateToStr(SelOM.AttachDate) + ';'
> + SelOM.AckId + ';'
> + IntToStr(SelOM.Size) + ';'
> + IntToStr(SelOM.AbsoluteRef) + ';'
> + IntToStr(SelOM.Flags01) + ';'
> + IntToStr(SelOM.Flags2) + ';'
> + IntToStr(SelOM.RecipId) + ';'
> + IntToStr(SelOM.RawAccessCaps) + ';');
>
> WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);
> closehandle(mh);
> gUALServer.DownloadItem(childOM, 'C:Program FilesEchoDownload'
> + DateToStr(SelOM.AttachDate)
> + ''
> + 'Doc' + IntToStr(i)
> + '.dat');
>
>
> end;
>