하나 또는 두 줄의 코드에서 currect 응용 프로그램의 exe 크기를 가져 오는 방법이 있습니까?쉽게 응용 프로그램 exe 크기 가져 오기
답변
그냥 웃음을 위해 ... 당신은 또한 스트림으로 이것을 할 수있다. 코드의 2 라인을 약간 넘는다. 일반적으로 경로를 포함하는 응용 프로그램 파일 이름은 Paramstr (0)에도 저장됩니다.
var
fs : tFilestream;
begin
fs := tFilestream.create(paramstr(0),fmOpenRead or fmShareDenyNone);
try
result := fs.size;
finally
fs.free;
end;
end;
불행히도 라이브러리를 사용하지 않고 한 줄 또는 두 줄의 코드만으로는 그렇게 할 수 없습니다.
쉬운 부분은 응용 프로그램의 exe 파일을 가져 오는 중입니다. 당신은 파일 크기를 검색하기위한 몇 가지 가능성이 있습니다 그것은 일반적으로
Application.ExeName
에서 찾을 수 있습니다
- 열기 파일 및 스트림의 크기를 참조하십시오. 이것은 '이전'델파이 함수
FileOpen
과FileSize
, 또는TFileStream
(size
속성 사용) 또는 Win32 API 함수CreateFile
과GetFileSize
함수를 사용하여 수행 할 수 있습니다. (플랫폼 의존!) 읽기 전용 액세스로 파일을 열 었는지 확인하십시오. - 순수 Win32 환경에서는
FindFirst
을 사용하여 파일 크기를 가져올 수 있습니다.TSearchRec.FindData.nFileSizeLow
에서 읽을 수 있습니다. 2GB가 넘는 파일을 준비하려면nFileSizeHigh
부분을 사용해야합니다. - Delphi.NET에서이 같은
System.IO.FileInfo
을 사용할 수 있습니다FileInfo.Create(filename).Length
(한 줄) - 리눅스에서 당신이
lstat64
기능 (단위Libc
)를 사용할 수 있습니다 및TStatBuf64.st_size
에서 크기를 얻을. 에서
을 (두 라이너는 변수 선언을 계산하지 않는 경우) JCL library 주어진 파일 이름의 파일 크기를 반환하는 간단한 기능을 포함하여 많은 유용한 기능을 찾을 수 있습니다. 당신이 시도 할 수
이 최상위 투표 대답 왜 몰라하여. 이 게시물에는 네이티브 Delphi VCL 명령 만 사용하여이를 수행하는 방법에 대한 몇 가지 예가 포함되어 있습니다. – JosephStyons
(그것은 주어진 플랫폼에 맞는 방법을 사용) :
네프 탈리
if FindFirst(ExpandFileName(Application.exename), faAnyFile, SearchRec) = 0 then
MessageDlg(Format('Tamaño: <%d>',[SearchRec.Size]), mtInformation, [mbOK], 0);
FindClose(SearchRec);
===============을
"try..finally"의 처음 두 줄을 래핑하고 FindClose를 "finally"부분에 넣으십시오. 그게 더 안정적입니다. – onnodb
스트림은 또한 TFileStream을 변수없이 사용할 수 있습니다
with TFilestream.create(paramstr(0), fmOpenRead or fmShareDenyNone) do
aFileSize := Size;
Free;
end;
이 미운 네.
DSiWin32에서 DSiFileSize를 사용하는 것이 좋습니다. 내부적으로 CreateFile을 사용합니다.
function DSiFileSize(const fileName: string): int64;
var
fHandle: DWORD;
begin
fHandle := CreateFile(PChar(fileName), 0, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if fHandle = INVALID_HANDLE_VALUE then
Result := -1
else try
Int64Rec(Result).Lo := GetFileSize(fHandle, @Int64Rec(Result).Hi);
finally CloseHandle(fHandle); end;
end; { DSiFileSize }
크기는 작지만 핸들이 필요하지 않습니다. 나는 이것을 자신의 크기를 알아야하는 모든 "SFX"아카이브와 프로그램에서 사용합니다. IIRC는 Windows 장치가 필요합니다.
function GetExeSize: cardinal; var p: pchar; i, NumSections: integer; const IMAGE_PE_SIGNATURE = $00004550; begin result := 0; p := pointer(hinstance); inc(p, PImageDosHeader(p)._lfanew + sizeof(dword)); NumSections := PImageFileHeader(p).NumberOfSections; inc(p,sizeof(TImageFileHeader)+ sizeof(TImageOptionalHeader)); for i := 1 to NumSections do begin with PImageSectionHeader(p)^ do if PointerToRawData+SizeOfRawData > result then result := PointerToRawData+SizeOfRawData; inc(p, sizeof(TImageSectionHeader)); end; end;
향후 호환성을 위해 가능한 경우 포인터 또는 Windows API 함수가 필요없는 구현을 선택해야합니다. skamradt가 제공하는 TFileStream 기반 솔루션은 나에게 잘 어울립니다.
하지만 ... 루틴의 코드가 1 행인지 10 행인지는 걱정하지 않아도됩니다. 어쨌든 파일 이름을 매개 변수로 사용하고 Int64를 반환하는 함수에 캡슐화 할 것이므로, 다시 사용할 수있는 코드의 개인 라이브러리에 저장하십시오. 그러면 다음과 같이 호출 할 수 있습니다.
GetMyFileSize (Application.ExeName);
내가 skamradt에서 제공하는 코드를 수정하고 싶습니다 만들기 위해 그것을하기 때문에, 당신이 ;-)
with tFilestream.create(paramstr(0),fmOpenRead or fmShareDenyNone) do
ShowMessage(IntToStr(size));
을 요청하지만 skamradt 쓴 로 코드를 사용하는 것을 선호하는 것처럼 두 줄의 코드 더 안전하다.
나는 할 수있다. 크기는 바이트로 설정되어 있으므로, 킬로바이트, 분할에 대한 1024
procedure TForm1.Button1Click(Sender: TObject);
begin
with TFileStream.Create(Application.ExeName,fmShareDenyNone) do
ShowMessage(FloatToStr(Size/1024));
end;
체크 아웃 this link.
이것이 왜 부정 투표를 정당화했는지 확신 할 수 없습니다. 누군가이 코드와 관련된 특정 문제를 지적 할 수 있습니까? – JosephStyons
TFileStream을 다시 해제하지 않았기 때문일 수 있습니다. – Jeff
uses IdGlobalProtocols;
var
ExeSize: Int64;
begin
ExeSize := FileSizeByName(ParamStr(0));
// or
ExeSize := FileSizeByName(Application.ExeName);
end;
- 1. 레지스트리의 모든 응용 프로그램 경로 가져 오기
- 2. 프로그램 아이콘 가져 오기
- 3. WPF 응용 프로그램 크기 대 Winforms 응용 프로그램 크기
- 4. nswindow 크기 가져 오기
- 5. 이미지 크기 가져 오기
- 6. 폴더 크기 가져 오기
- 7. Java에서 드라이브 크기 가져 오기 5
- 8. 오류가있는 응용 프로그램 splwow64.exe
- 9. 응용 프로그램 내에서 리소스 파일 가져 오기
- 10. 프로세스 이름에서 응용 프로그램 이름 가져 오기
- 11. django 응용 프로그램 내에서 가져 오기 전략
- 12. Java/Windows 응용 프로그램 위치 가져 오기
- 13. 장치에 응용 프로그램 정보 가져 오기
- 14. 비 시스템 응용 프로그램 목록 가져 오기
- 15. opensource 응용 프로그램 내에서 데이터 가져 오기
- 16. 응용 프로그램 표준 리소스 관리자 가져 오기
- 17. Installer 클래스의 응용 프로그램 디렉토리 가져 오기
- 18. ProcessSerialNumber에서 응용 프로그램 아이콘 가져 오기
- 19. 아이폰 응용 프로그램 크기
- 20. 응용 프로그램 크기 조정
- 21. 바자에서 파일 크기 가져 오기
- 22. Tkinter 창 크기 가져 오기
- 23. Silverlight : 이미지 크기 가져 오기
- 24. RAM 시스템 크기 가져 오기
- 25. 링크 콘텐츠 크기 가져 오기
- 26. 진정한 콘텐츠 크기 가져 오기
- 27. 처리기에서 이미지 크기 가져 오기
- 28. FLEX : 폴더 크기 가져 오기
- 29. 기본 프로그램 가져 오기
- 30. 응용 프로그램 아이콘이있는 설치된 프로그램 목록 가져 오기
멋지게 완료되었습니다. 나는 당신의 대답이 모하메드 나스 만이나 저보다 더 읽기 쉽다고 생각합니다. – JosephStyons