PDA

View Full Version : ذخیره و بازیابی چندین فایل مجزا در قالب یک فایل



saeed_rezaei
دوشنبه 01 بهمن 1386, 10:17 صبح
سلام بر عزیزانی که این پست رو می خونن.
قصدم از زدن این تاپیک گرفتن نمونه کد نیست. می خوام دوستان الگوریتمی نظر بدن.
می خوام چندین فایل رو در قالب یک فایل ذخیره کنم. حالا این فایلها هر فایلی می تونه باشه. می خوام خود برنامه بتونه این کار رو انجام بده. و از طرفی بعدا بتونه فایلها رو استخراج کنه.
درست مثل حالت zip کردن. فایلها می رن در قالب یک فایل ذخیره می شن و البت شما می تونید متحویات داخلی رو با برنامه winzip ببینید.
البته من قصد فشرده سازی فایلها رو ندارم. پسوند فایل نتیجه هم مهم نیست که exe باشه یا چه می دونم، مثلا 123
مهم اینه که برنامه من، فایلها رو pack کنه و بعدا بتونه بخونه.
دوستان قبلا در این زمینه فکر کردن، مواردی رو مطالعه داشتن؟؟
پیشا پیش از راهنمایی هاتون متشکرم.

mazoolagh
دوشنبه 01 بهمن 1386, 12:32 عصر
embeded resource

saeed_rezaei
دوشنبه 01 بهمن 1386, 23:01 عصر
با تشکر از پیشنهاد دوست عزیز جناب مازولق
راه دیگه چی؟؟

Chabok
دوشنبه 01 بهمن 1386, 23:36 عصر
سلام
با خود Zip کردن موافق نیستید ؟

مهم اینه که برنامه من، فایلها رو pack کنه و بعدا بتونه بخونه.
آیا میخواهید حتما برنامه شما فایل ها رو بخونه ؟
یعنی با برنامه های دیگری قابل شناسایی نباشه ؟

hesam_hma
دوشنبه 01 بهمن 1386, 23:37 عصر
اطلاعات رو بصورت باینری ذخیره کنیم و تعداد بایتهای هر فایل بعلاوه پسوندشون رو نگهداری کنیم و در زمان بر گرداندن فایلها به تعداد بایتهای ذخیره شده در یک فایل جدید ذخیره کنیم و پسوند مربوطه رو بهش اضافه کنیم مثلا فایل hesam.jpg رو بصورت باینری ذخیزه کنیم و اطلاعات اونو بعنوان مثال 1000 بایت اول فایل و پسوند jpg رو در بانک نگه داریم
فکر می کنم اگه روش کار کنی میشه این کار رو کرد!

mahdi_farhani
دوشنبه 01 بهمن 1386, 23:59 عصر
خوب الگوریتم زیاد هست برای این کار ، باید ببینیم هدفت از این کار چیه .
اگر حجم فایل ایجاد شده برات مهم نیست بیا فایل ها رو باز کن و شروع کن به خوندن و داخل فایل جدید بنویس پس از پایان هر فایل برای خودت یه نشونه بزار و نام فایل را ذخیره کن و دوباره یه نشون و فایل بعدی ........
ولی اگر حجم فایل برات مهمه یه مقدار دنبال الگوریتم های فشرده سازی باش و دوباره همون داستان نشانه گذاری .....
یا بیا یه هدر برای خودت درست کن به این صورت که بگی چند تا فایل داری . فایل شماره 1 با این نام از کجا شروع میشه کجا تمام میشه ، فایل شماره 2 هم همینطوری و ...... البته پرچم های کنترلی برای کنترل خطا و صحت فایل ها رو فراموش نکن . .
ولی ولم کنید تا فردا صبح ( البته الان که دارم پست میدم دسته کمی از فردا صبح نداره ) برات الگوریتم ردیف میکنم .

saeed_rezaei
سه شنبه 02 بهمن 1386, 09:41 صبح
سلام بر شما دوستان عزیز



با خود Zip کردن موافق نیستید ؟
چرا، فکر خوبیه. اما خوب دنبال بهتر از اینش می گردم.


آیا میخواهید حتما برنامه شما فایل ها رو بخونه ؟
یعنی با برنامه های دیگری قابل شناسایی نباشه ؟
واسه همینه که دنبال بهترش می گردم. یه چیزی که به برنامه دیگه وابسته نباشه.



طلاعات رو بصورت باینری ذخیره کنیم و تعداد بایتهای هر فایل بعلاوه پسوندشون رو نگهداری کنیم و در زمان بر گرداندن فایلها به تعداد بایتهای ذخیره شده در یک فایل جدید ذخیره کنیم و پسوند مربوطه رو بهش اضافه کنیم مثلا فایل hesam.jpg رو بصورت باینری ذخیزه کنیم و اطلاعات اونو بعنوان مثال 1000 بایت اول فایل و پسوند jpg رو در بانک نگه داریم
فکر می کنم اگه روش کار کنی میشه این کار رو کرد!
فکر خوبیه. باید با سایر نتیجه ها مقایسش کنم.



باید ببینیم هدفت از این کار چیه .
زیاد در موردخود برنامه نمی تونم فعلا چیزی بگم. اما خوب !! یه مقداریش اینجوریه: این برنامه بایستی تعداد بسیار زیادی (حداقل 60 تا) فایل تصویر رو که پسوندشون شامل psd, jpg, png, ini می شه رو از کاربر می گیره. بعد این فایلها رو pack می کنه. حالا همانطور که گفتید حجم فایل محدودیت ایجاد می کنه.
می خوام فایل پایانی حجمش کمتر از مجموع فایلها بشه. ترجیحا خود برنامه فقط بتونه اطلاعات رو بخونه. الگوریتم خودندن فایلها خیلی کند نباشه.
از تمامی دوستانی که دارن وقت می زان بازهم تشکر می کنم.

visual_sadegh
سه شنبه 02 بهمن 1386, 11:11 صبح
یه الگریتم تو ذهن من اینه که برای فایلت یه هدر که شامل نام فایل و اندازه اون فایل بر حسب بایت درست کنی اندازه هدر هم بسته به تعداد فایل ها کم و زیاد می شه و می تونی برای جدا کردن قسمت هدر از دیتا ها یک نشانه مثل رشته "Data" قرار بدی .
ساختار فایل های دی بی اف قدیمی فاکسپرو تقریبا اینطوری بود.

mahdi_farhani
سه شنبه 02 بهمن 1386, 12:19 عصر
یه مقدار باید مباحث ذخیره بازیابی رو مطالعه کنی ، ذخیره و بازیابی نوشته سید محمد تقی رانکوهی رو بخونی بد نیست . بت خیلی کمک میکنه .

saeed_rezaei
سه شنبه 02 بهمن 1386, 22:23 عصر
یه مقدار باید مباحث ذخیره بازیابی رو مطالعه کنی ، ذخیره و بازیابی نوشته سید محمد تقی رانکوهی رو بخونی بد نیست . بت خیلی کمک میکنه .


ممنونم. اما خوب تجربه و مطالعه دوستان هم می تونه تا حد زیادی در تصمیم گیری ها کمک کنه!!

visual_sadegh
چهارشنبه 03 بهمن 1386, 09:01 صبح
درصورت امکان ما رو از نتیجه گیری خودتون مطلع کنید.
ممنون

Daren_the_Devil
شنبه 06 بهمن 1386, 10:44 صبح
دوست من من یک برنامه عالی نوشتم فقط یه جا گیر داره : چه طوری دوتا آرایه Byte رو با هم قاطی کنم بشه یکی ؟

mazoolagh
شنبه 06 بهمن 1386, 22:22 عصر
ممنونم. اما خوب تجربه و مطالعه دوستان هم می تونه تا حد زیادی در تصمیم گیری ها کمک کنه!!

خوب ظاهراً تعداد و محتوای فایلهای شما متغیر هست و در اینصورت نمیشه embeded resource معرفیشون کرد.

اما شما میتونین همون روش zip رو (که بهش اشاره هم شد) استفاده کنین ولی باید command line support addon رو از سایت winzip دانلود کنین. حالا میتونین از داخل برنامه تون هر عملیاتی که برای zip-unzip احتیاج دارین با این addon انجام بدین.

saeed_rezaei
شنبه 06 بهمن 1386, 22:33 عصر
خوب ظاهراً تعداد و محتوای فایلهای شما متغیر هست و در اینصورت نمیشه embeded resource معرفیشون کرد.

کاملا صحیحه



اما شما میتونین همون روش zip رو (که بهش اشاره هم شد) استفاده کنین ولی باید command line support addon رو از سایت winzip دانلود کنین. حالا میتونین از داخل برنامه تون هر عملیاتی که برای zip-unzip احتیاج دارین با این addon انجام بدین.

به عنوان آخرین راه از همین روش استفاده می کنم. اما خوب قصدم این بود که به برنامه جانبی محتاج نشم.

mazoolagh
شنبه 06 بهمن 1386, 22:46 عصر
شما میتونین از برنامه جانبی هم استفاده نکنین ولی باید یک جایی مشخصات فایلها و طول اونها رو ذخیره کنین تا بتونین straem رو درست بخونین

saeed_rezaei
شنبه 06 بهمن 1386, 22:50 عصر
یعنی اینکه فایلها رو به سرو ته همدیگه بچسبونم بندازم توی یه فایل جدید؟؟

mazoolagh
شنبه 06 بهمن 1386, 23:11 عصر
بله ! اینطور بنظر میاد.
البته مشکلی هم نیست جز کمی کدنویسی.

saeed_rezaei
یک شنبه 07 بهمن 1386, 15:16 عصر
جز کمی کدنویس

میشه این قسمت رو بیشتر توضیح بدید.

mazoolagh
یک شنبه 07 بهمن 1386, 20:11 عصر
منظور همون کد خوندن فایلها بصورت استریم و نوشتن اونها در یک فایل دیگه است. همینطور ساختن جدولی که مشخصات هر فایل (اسم و پسوند و سایز) رو نگهداری میکنه. این جدول باید بصورت یک هدر اول فایلی که میسازین ظاهر بشه.
استراکچر این هدر هم میتونه بصورت fixed باشه (فکر نکنم جور دیگه ای بشه).

مثلاً:
word اول = تعداد فایلها
128 بایت برای اسم و پسوند هر فایل + 8 بایت برای سایز فایل
یعنی اگر 6 تا فایل داشته باشین سایز هدر برابر میشه با 1 + 6 * (128+8) بایت

saeed_rezaei
یک شنبه 07 بهمن 1386, 21:49 عصر
آیا نمونه کد، برنامه، لینکی و یا هر موردی که یه نقطه اولیه بده سراغ دارید.