نکته درباره File i\o :
اول اینکه وقتی کلا خط به خط میخونیم و ذخیره میکنیم اطلاعات ذخیره شده خراب از آب درمیاد ! حالا چه با تابع file:lines() یا با تابع حتی file:read("*l"); فقط باید یا کل فایل را یکجا بخونیم و توی متغییر بریزیم و یا اگه فایل حجیم هست (بالای 200 مگ) و داخل متغییر جا نمیشه ، باید تعداد کاراکتری که میخونیم رو با استفاده از تابع file:read و نوشتن تعداد کاراکترهای مورد نیاز در آرگومان این تابع (نوشتن شماره) و قرار دادن در حلقه while ، به همون تعداد از کاراکترهای اون فایل را بخونیم و توی متغییر ذخیره و توی فایل جداگانه ذخیره کنیم (چرا خوندن خط به خط جواب نمیده ، نمیدونم)
دوم اینکه میشه اطلاعات فایل های باینری رو داخل آرایه ریخت اما وقتی میخوایم آرایه ها را به هم متصل کنیم چون یا بصورت دستی مجبوریم یه رشته ی خالی را برای مقدار ذخیره ی خونه های قبلی آرایه برای جسبوندن استفاده کنیم ، و وقتی هم که به رشته ی حاوی اطلاعات باینری ، کوچیک ترین چیز و یا رشته و یا کاراکتری اضافه کنیم (حتی اگه رشته ی خالی که "" هست رو اضافه کنیم) ساختار باینری و اطلاعاتش کاملا به هم میریزه بنابراین نمیشه اطلاعاتی که داخل آرایه هست رو توی خروجی فایلی ذخیره کنیم (ذخیره میشه ولی اطلاعات آرایه ی ذخیره شده ، اشتباه هست و فایل نهایی ارور میده) و یا اینکه برای اتصال اعضای آرایه از تابع Table.Concat (برای اتوپلی) و یا تابع table.concat (برای لوا) استفاده میکنیمم که هردوی این توابع در آرگومان دوم شون حداقل رشته ی خالی میگیرن برای جدا کردن اعضای آرایه و چون گفته شد که رشته ی حتی اگه هم خالی باشه باعث به هم ریختن اطلاعات رشته ی باینری میشه ، این روش هم نمیشه بنابراین تا جایی که میدونم ، اطلاعات داخل آرایه رو نمیشه به عنوان اطلاعات درست باینری ذخیره کرد.
البته اطلاعات باینری ذخیره شده در آرایه (اگه با تابع file:read() باشه برای اطلاعات باینری (برای اطمینان از این تاب استفاده کنین)) ، درست هست ولی فقط ذخیره نمیتونیم کنیم اطلاعات آرایه رو داخل فایل
سوم اینکه بنابراین فقط اطلاعات فایل های باینری رو میشه بصورت مستقیم ذخیره کرد یعنی اطلاعات فایل را بخونیم و داخل فایل دیگه ذخیره کنیم یا اینکه این اطلاعات باینری رو داخل متغییری ذخیره و بعد داخل فایل دیگه بصورت باینری ذخیره کنیم . البته اگه فایل بزرگ باشه ، همه ی اطلاعات داخل متغییر جا نمیشن و ممکنه ارور بده که در این صورت با شماره دادن در آرگومان تابع file:read() ، به تعداد همون شماره ، کاراکتر رو میخونه یعنی اطلاعات فایل تیکه میشه و حالا این متغییر را که حاوی بخشی از اطلاعات اون فایل بزرگ (فایل مبدا) هست را در یک فایل دیگه میشه ذخیره کرد که مشخصه داخل حلقه میتونیم به تعدادی که دلمون میخواد تیکه کنیم






پاسخ با نقل قول
Bookmarks