ورود

View Full Version : بدست آوردن Size on disk



spicirmkh
شنبه 30 دی 1385, 11:05 صبح
سلام دوستان

من به دنبال بدست آوردن Size on disk هستم

برنامه یا توابع که دوستان معرفی کرده اند مثل GetFileSize مقدار واقعی فایل نمایش می دهند و نه مقدار که روی disk است

با تشکر

MNosouhi
شنبه 30 دی 1385, 13:00 عصر
در آدرس زیر یه کامپوننت آپلود کردم :
http://www.barnamenevis.org/forum/showthread.php?p=299943#post299943

spicirmkh
یک شنبه 01 بهمن 1385, 09:38 صبح
سلام

من جوابم به درستی نگرفتم

شما وقتی Properties یک فایل می گیرید 2 تا size فایل نمایش می دهد یکی Size و دیگری Size On Disk است که با هم متفاوت است که من Size Ond Disk را می خواهم .

لطفا دوستان اگر می داند با مثال توضیح بدهند
با تشکر

vcldeveloper
دوشنبه 02 بهمن 1385, 02:47 صبح
function GetFileSizeOnDisk(const FileName: TFileName): Cardinal;
var
spc,bps,nofc,tnoc : Cardinal;
ClusterSize,
ClustersCount,
FileSize : Cardinal;
begin
Result := 0;
if not FileExists(FileName) then
Exit;
//Call GetDiskFreeSpace to find out disk cluster size.
if not GetDiskFreeSpace(PAnsiChar(ExtractFileDrive(FileNa me)),spc,bps,nofc,tnoc) then
Exit;
//Cluster size = Bytes Per Sector * Sectors Per Cluster
ClusterSize := bps * spc;
//Get actual file size.
FileSize := GetCompressedFileSize(PAnsiChar(FileName),nil);
ClustersCount := FileSize div ClusterSize;
//Calculate file size on the disk.
Result := ClustersCount * ClusterSize;
//if the file occupies a cluster partially, add cluster size to file size, because
//a cluster is the smallest unit of disk which is accesible.
if FileSize > Result then
Inc(Result,ClusterSize);
end;


مثال:


GetFileSizeOnDisk('D:\Project1.exe');

spicirmkh
سه شنبه 03 بهمن 1385, 09:10 صبح
سلام

آقای کشاورز ممنونم ، یک سوال دیگر وقتی Properties یک فایل می بینیم دو تا مقدلر size on disk دیده می شود مثل size on disk : 1.09 MB (1,146,880 bytes برنامه که شما لطف کرده اید مقدار 2 می دهد یعنی 11468800 من مقدار اول می خواهم

ضمنا می خواستم فرق این مقادیر بدانم


با تشکر

dkhatibi
سه شنبه 03 بهمن 1385, 13:53 عصر
بین اینها کمکی می کنند؟
http://www.swissdelphicenter.ch/torry/showcode.php?id=172
http://www.jpgriffiths.com/tutorial/filesize.html

vcldeveloper
چهارشنبه 04 بهمن 1385, 07:31 صبح
وقتی Properties یک فایل می بینیم دو تا مقدلر size on disk دیده می شود مثل size on disk : 1.09 MB (1,146,880 bytes برنامه که شما لطف کرده اید مقدار 2 می دهد یعنی 11468800 من مقدار اول می خواهمشما در پست اولتون گفتید مقدار Size on disk رو می خواید، الان میگید مقدار اول یعنی File Size رو می خواید.
کوچکترین واحد ذخیره سازی که یک فایل سیستم با اون کار میکنه Cluster هست. یعنی اگر اندازه کلاستر روی دیسک شما 4 کیلوبایت باشه، حداقل فضایی که یک فایل اشغال میکنه، صرف نظر از حجم واقعی فایل، 4 کیلو بایت هست؛ یعنی یک فایل 1 کیلوبایتی هم 4 کیلوبایت فضا روی دیسک اشغال میکنه. پس فضای اشغال شده روی دیسک لزوما برابر با حجم فایل نیست. در درایوهای NTFS که امکان compress کردن فایل ها هم وجود داره، ممکنه حجم اشغال شده روی دیسک حتی کمتر از حجم اصلی فایل باشه. این دلیل تفاوت اون دو مقدار بود.
برای بدست آوردن حجم واقعی یک فایل از توابعی مثل GetFileSize یا GetCompressedFileSize استفاده میشه که دومی حجم فایلهای فشرده شده روی دیسک رو هم برمی گردونه.
برای بدست آوردن فضای اشغال شده یک فایل بر روی دیسک باید تعداد کلاسترهای اشغال شده توسط اون فایل رو محاسبه کنید که کد بالا اون کار رو براتون انجام میده.

spicirmkh
چهارشنبه 04 بهمن 1385, 08:16 صبح
شما در پست اولتون گفتید مقدار Size on disk رو می خواید، الان میگید مقدار اول یعنی File Size رو می خواید.


سلام

آقای کشاورز با تشکر از ارسال جوابتان و راهنمائی که کرده اید من هنوز هم می گویم Size on disk می خواهم ، در Properties فایل ُSize on disk باز هم 2 تا مقدار می دهد یکی داخل پرانتز و دیگری خارج پرانتز برنامه ای که شما ارائه کرده اید مقدار داخل پرانتز می دهد و من مقدار خارج پرانتز می خواهم


در حقیقت یک فایل داری 3 مقدار می باشد که یکی مقدار Size Disk و 2 مقدار Size on disk است

با تشکر

vcldeveloper
چهارشنبه 04 بهمن 1385, 08:30 صبح
من هنوز هم می گویم Size on disk می خواهم ، در Properties فایل ُSize on disk باز هم 2 تا مقدار می دهد یکی داخل پرانتز و دیگری خارج پرانتز برنامه ای که شما ارائه کرده اید مقدار داخل پرانتز می دهد و من مقدار خارج پرانتز می خواهم
عزیز دل من....مقدار داخل پرانتز به بایت هست، مقدار بیرون پرانتز به کیلوبایت یا مگابایت!!!
برای تبدیل بایت به کیلوبایت اونو تقسیم بر 1024 می کنند، برای تبدیل به مگابایت تقسیم بر 1024 * 1024.
موفق باشید