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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: بدست آوردن حجم یک فایل  (دفعات بازدید: 3803 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین khajavi

  • Sr. Member
  • *
  • ارسال: 361
  • جنسیت : پسر
    • کافه ی گنو/لینوکس
بدست آوردن حجم یک فایل
« : 17 بهمن 1386، 11:50 ب‌ظ »
چگونه می تواتم حجم یک فایل را محاسیه کنم. یعنی فرمول بدست آوردن حجم یک فایل چی هست. یعنی نمی خوام از متدی استفاده کنم بلکه با شمردن کاراکتر ها می خواهم حجم فایل را محاسبه کنم.
سوالاتی هم در این زمینه دارم:
۱− چرا اسم فایل در حجم یک فایل تاثیری ندارد
۲− چرا حروف فارسی دو برابر حروف انگلیسی حجم دارتد؟
۳− آخر هر خط در یک فایل با چه چیزی نمایش داده می شود؟ آیا همین علامت حجمی اشعال می کند؟ آخر خط در Linux و Windows باهم تفاوت دارد؟
۴− تو کتاب how to program  نوشته:
Characters in Java are Unicode characters composed of two bytes,
یعنی هر کاراکتر یک کارکتر unicode هست و ۲ بایت اشغال می کنه در صورتی که فقط حروف فارسی ۲ بایت اشغال می کنند و حروف انگلیسی فقط یک بایت. آیا این تناقص نیست؟

آفلاین ابراهیم

  • High Hero Member
  • *
  • ارسال: 1295
  • جنسیت : پسر
  • راه‌رو گر صد هنر دارد توکل بایدش
    • سلام!
پاسخ به: بدست آوردن حجم یک فایل
« پاسخ #1 : 18 بهمن 1386، 12:12 ق‌ظ »
چگونه می تواتم حجم یک فایل را محاسیه کنم. یعنی فرمول بدست آوردن حجم یک فایل چی هست. یعنی نمی خوام از متدی استفاده کنم بلکه با شمردن کاراکتر ها می خواهم حجم فایل را محاسبه کنم.
نمی‌دونم دقیقاً چی می‌خوای. می‌تونی از اول پرونده شروع کنی به خوندن (کاراکتر به کاراکتر) و یک شمارنده رُ زیاد کنی تا به آخرش برسی. به نظر می‌تونی با seek کردن، جستجوی دودویی (binary search) هم بکنی.
۱− چرا اسم فایل در حجم یک فایل تاثیری ندارد
به این جور اطلاعات در مورد یک پرونده می‌گن فراداده (metadata) که جدا از محتویات پرونده، توی سامانهٔ پرونده (file system) نگه‌داری می‌شن.
۲− چرا حروف فارسی دو برابر حروف انگلیسی حجم دارتد؟
فکر کنم توی روش کدبندی UTF-8 این جوری هست. برای این که بشه نویسه‌ها(characterها)ی بسیاری از زبان‌های دنیا رُ با یک قرارداد نشون داد، مجبوریم برای بعضی نویسه‌ها، دو بایت در نظر بگیریم.
۳− آخر هر خط در یک فایل با چه چیزی نمایش داده می شود؟ آیا همین علامت حجمی اشعال می کند؟ آخر خط در Linux و Windows باهم تفاوت دارد؟
در خانوادهٔ Unix با n\ با کد ASCII برابر 0x0A و در خانوادهٔ ویندوز با r\n\ یعنی اول 0x0A و بعد 0x0D. در خانوادهٔ مکینتاش هم با یک 0x0D خالی.
۴− تو کتاب how to program  نوشته:
Characters in Java are Unicode characters composed of two bytes,
یعنی هر کاراکتر یک کارکتر unicode هست و ۲ بایت اشغال می کنه در صورتی که فقط حروف فارسی ۲ بایت اشغال می کنند و حروف انگلیسی فقط یک بایت. آیا این تناقص نیست؟
این رُ باید از جاوابازها پرسید. نمی‌دونم جاوا از چه کدبندی Unicode استفاده می‌کنه که اینجوری هست.
« آخرین ویرایش: 19 بهمن 1386، 02:59 ق‌ظ توسط ابراهیم »
ما زنده به آنیم که آرام نگیریم     ...     موجیم که آسودگی ما عدم ماست

آفلاین salamat

  • Full Member
  • *
  • ارسال: 235
  • جنسیت : پسر
  • تخیل همه چیز است . (آلبرت اینشتن)
پاسخ به: بدست آوردن حجم یک فایل
« پاسخ #2 : 18 بهمن 1386، 02:08 ق‌ظ »

نقل‌قول
۴− تو کتاب how to program  نوشته:
Characters in Java are Unicode characters composed of two bytes,
یعنی هر کاراکتر یک کارکتر unicode هست و ۲ بایت اشغال می کنه در صورتی که فقط حروف فارسی ۲ بایت اشغال می کنند و حروف انگلیسی فقط یک بایت. آیا این تناقص نیست؟

یونی کد مجموعه کاراکتر های بین المللی است که می تواند نمایانگر تمام کاراکتر های موجود در همه زبانهای باشد. محدوده char در جاوا از صفر است تا ۶۵۵۳۶ . یعنی مجموعی کاراکتر های زبانهای مختلف از جمله لاتین - فارسی - عربی - ژاپنی و.... .

برای اطلاعات بیشتر به http://www.unicode.org آدرس مراجعه کنید.  ;)

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ به: بدست آوردن حجم یک فایل
« پاسخ #3 : 18 بهمن 1386، 02:58 ق‌ظ »
نقل‌قول از: ابراهیم
در خاموادهٔ Unix با r\ با کد ASCII برابر 0x0A و در خانوادهٔ ویندوز با r\n\ یعنی اول 0x0A و بعد 0x0D. در خانوادهٔ مکینتاش هم با یک 0x0D خالی.
اشتباه ننوشتید؟ فکر کنم اینجوری هست:
Unix/Linux newline = \n = 0x0A
Dos/Windows newline = \r\n = 0x0A 0x0D
Mac newline = \n\r = 0x0D 0x0A
لینوکس و ویندوز رو که مطمئنم درست نوشتم. مک رو شک دارم.

نقل‌قول از:
۴− تو کتاب how to program  نوشته:
Characters in Java are Unicode characters composed of two bytes,
یعنی هر کاراکتر یک کارکتر unicode هست و ۲ بایت اشغال می کنه در صورتی که فقط حروف فارسی ۲ بایت اشغال می کنند و حروف انگلیسی فقط یک بایت. آیا این تناقص نیست؟
شاید اون UTF-16 هست. در ضمن فکر می‌کنم این جملهٔ اون کتاب فقط در مورد نوع دادهٔ char در جاوا باشه. نه همه جای جاوا! تا اونجایی که من می‌دونم جاوا متدهایی به نام writeUTF و readUTF در مورد فایل‌ها داره که بر طبق UTF-8 عمل میکنن(که حروف انگلیسی توش تک‌بایتی هستن).
در ضمن توی UTF-8 بعضی زبونها(مثل چینی و ژاپنی) حروفشون سه بایت هستن.
ظاهرا توی UTF-16 همهٔ کاراکتر‌ها دو بایتی هست. اما توی UTF-8 بعضی کاراکترها یک‌بایتی هستن(کاراکرهای انگلیسی)، بعضی دوبایتی (مثل کاراکترهای فارسی و عربی. به جز چند تا کاراکتر بسیار غیرمشهور و نادر که چهاربایتی هستن) و بعضی هم (مثل کاراکترهای ژاپنی) سه بایتی هستن.
با این حساب احتمالا نحوهٔ ذخیره‌سازی نوع داده char در جاوا به شیوهٔ  UTF-16  باشه.
« آخرین ویرایش: 18 بهمن 1386، 03:10 ق‌ظ توسط ilius »

آفلاین khajavi

  • Sr. Member
  • *
  • ارسال: 361
  • جنسیت : پسر
    • کافه ی گنو/لینوکس
پاسخ به: بدست آوردن حجم یک فایل
« پاسخ #4 : 18 بهمن 1386، 07:17 ق‌ظ »
از همگی تشکر
اما در مورد Unicode به نتیجه نرسیدم. یه سوال دیگه دارم:
فایل بدون هیچ گونه محتویات به خاطر چه چیزی یک بایت فضا اشغال می کند؟

lomion

  • مهمان
پاسخ به: بدست آوردن حجم یک فایل
« پاسخ #5 : 18 بهمن 1386، 10:20 ق‌ظ »
علامت انتهای فایل اگه اشتباه نکنم.

آفلاین ابراهیم

  • High Hero Member
  • *
  • ارسال: 1295
  • جنسیت : پسر
  • راه‌رو گر صد هنر دارد توکل بایدش
    • سلام!
پاسخ به: بدست آوردن حجم یک فایل
« پاسخ #6 : 19 بهمن 1386، 02:58 ق‌ظ »
اشتباه ننوشتید؟
بله، قسمت پررنگ‌شده ر
« آخرین ویرایش: 19 بهمن 1386، 03:00 ق‌ظ توسط ابراهیم »
ما زنده به آنیم که آرام نگیریم     ...     موجیم که آسودگی ما عدم ماست

آفلاین khajavi

  • Sr. Member
  • *
  • ارسال: 361
  • جنسیت : پسر
    • کافه ی گنو/لینوکس
پاسخ به: بدست آوردن حجم یک فایل
« پاسخ #7 : 19 بهمن 1386، 01:08 ب‌ظ »
مقاله ی newline را باید بخونم زیاده. اما به درد به خور
اما در ادامه تحقیفاتم! در مورد کارکتز های یونیکد به نتایج جالبی رسیدم.
در مجموعه کتاب هایی که آقای سلامت بهم دادند(دستشون درد نکنه  \\:D/ ) کتابی به نام O'Reilly Java I/O بود که در مورد Character set ها اینگونه نوتشه بود:
۱−ASCII: هفت بیتی.  در نتیجه ۱۲۸ کاراکتر متفاوت
۲− ISO_Latin_1: هشت بیتی: درنتیجه ۲۵۶ کارکتر متفاوت
۳− Unicode: دو بایتی : ۶۵۵۳۶ کاراکتر متفاوت.
استفاده از Unicode در فایل هایی که بیشتز کاراکتر های آن ASCII می باشند غیر موثر هست. چون برای مثال کاراکتر های a b c d .. هم دو بایت اشغال می کنند در صورتی که نیاز به اشغال دو بایت ندارند در نتیحه UTF-8 تعریف شد:
۴− UTF-8: این فرمت کاراکتر های ASCII یک بایت اشغال می کنند و کارکاتر های غیر ASCII تا ۱۹۱۹ دو بایتی هستند و باقیمانده ۳ بایتی هستند.

به همین علت کاراکتر های فارسی دوبایت اشغال می کردند و کاراکتر های انگلیسی یک بایت.

عجب سوتی ای دادم. illus قبلا جواب منو داده بودند ولی من درست متوجه نشدم. طوری نیست من هم به بیان دیگه جواب خودم را دادم