PDA

View Full Version : سوال: کپی کردن یک دایرکتوری در C++‎



mhazami
پنج شنبه 15 آبان 1393, 00:52 صبح
سلام دوستان، من میخوام یه برنامه بک آپ گیری با C++‎‎ بسازم (نمیخوام بر پایه mfc باشه همون کنسول کارمو راه میندازه)

چرا به یه برنامه بک آپ نیاز دارم ؟

من توی خونه کامپیوتر و لپتاپم رو از طریق مودم wifi شبکه کردم (همچنین توی محل کارم) به هر حال به عنوان مثال وقتی که با لپتاپ یه فایلی رو دانلود میکنم توی این آدرس ذخیره میشه
c:/download/filename حالا ادرس اون توی شبکه میشه
//mylaptop/c/download/filename حالا با توجه به اینکه حالت شبکه همیشه برقراره (بجز وقتی که مودم، یا یکی از دستگاه ها خاموشه) من میخوام محتویات دایرکتوری به صورت خودکار کپی بشن. توی مثال بالا من فایلی رو با لپتاپ دانلود کردم پس میخوام توی این آدرس هم وجود داشته باشه.

//mycomputer/c/download/filename و این کار بلعکس هم صورت بگیره.

حالا اون چیزی که من تصور میکنم از عملکرد برنامه اینه که باید به صورت startup باشه (همزمان با اجرای سیستم عامل لود بشه) و یه تایمر داشته باشه یا بر اساس ساعت سیستم مثلا هر 30 دقیقه یک بار آدرس دایرکتوری رو چک کنه و تغییرات رو اعمال کنه (یعنی مثلا یه فایل جدید اضافه شد اونو منتقل کنه) و همچنین باید از کپی کردن فایل های مشابه جلوگیری کنه.

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

حالا ممکنه یه عده بگن خب مثل بچه ادم خودت کپی کن، منم در جواب باید بگم کنجکاو شدم هرطوری که شده این روش رو پیاده سازی کنم :)

از نظر امنیت و این حرف هام اصلا نگرانی ندارم کاملا دستم بازه چون اطرافم به اون صورت "هکر" وجود نداره :لبخند:

2020s1371
پنج شنبه 15 آبان 1393, 08:32 صبح
:افسرده: یه جواب بی ربط: با لینوکس میتونید دوتا پوشه رو سینک کنید!:متفکر: اگه با ویندوز کار خاصی ندارید پیشنهاد من استفاده از اوبونتوـه:چشمک:

systole
پنج شنبه 15 آبان 1393, 08:47 صبح
حالا چرا یه چیز ساده مثل اینو میخوای با CPP بنویسی؟
شما که از وین‌دزد استفاده می‌کنی بهتره از ابزارهای راحت‌الحلقومی مثل سی‌شارپ یا وی‌بی استفاده کنی...

mhazami
پنج شنبه 15 آبان 1393, 12:13 عصر
:افسرده: یه جواب بی ربط: با لینوکس میتونید دوتا پوشه رو سینک کنید!:متفکر: اگه با ویندوز کار خاصی ندارید پیشنهاد من استفاده از اوبونتوـه:چشمک:

نه متاسفانه اوبونتو توی موارد گرافیکی حسابی لنگ میزنه، خصوصا توی مبحث رندر کردن فونت ها برای همین نمیتونم ازش استفاده کنم، کلا توی خونه و محل کارمم از ویندوز 8 استفاده میکنم.

mhazami
پنج شنبه 15 آبان 1393, 12:28 عصر
حالا چرا یه چیز ساده مثل اینو میخوای با CPP بنویسی؟
شما که از وین‌دزد استفاده می‌کنی بهتره از ابزارهای راحت‌الحلقومی مثل سی‌شارپ یا وی‌بی استفاده کنی...

سی شارپ رو که بلد نیستم، وی بی هم پیشنهاد خوبیه ولی علاقه بیشتری نسبت به c++ دارم یه جورایی کنجکاو شدم که این روش رو با استفاده از c++ پیاده کنم

البته با دستورات سیستم هم کارم راه میوفته ولی احساس میکنم یه جورایی کارم ناقصه چون یه سری سوال برام به وجود اومده.

system("copy \\\\mylaptop\\\d\\test \\\\mycomputer\\G\\share");

با این دستور دوتا فایل رو انتقال دادم بعد دوباره برنامه رو اجرا کردم بازم نوشت دوتا فایل کپی شد بعد کامپیوتر رو چک کردم دیدم تغییری اعمال نشده یعنی همون دوتا فایل بودن و فایل های تکراری رو شماره گذاری نکرده.

حالا سوالم اینجاست که آیا فایل هارو جایگزین میکنه یا میفهمه فایل تکراریه و از روش رد میشه ؟

بعد یه مشکل دیگه، من دوتا فایل ساده رو جا به جا کردم که کلا 10 کیلوبایت حجم داشتن اگر مثلا بخوام تعداد زیادی فایل رو جا به جا کنم که حالا شاید یکیشون 1 گیگ حجمش بود، خب با این دستور اگه بخواد هر بار جایگزین کنه (با فرض اینکه برنامه خودکار انجام میشه این دستور رو گذاشتم توی تایمر) به نظرم اومد که منابع سیستم برای یک مدت نسبتا طولانی بیهوده درگیر میشن.

برای حل این مشکل باید اسم همه ی فایل هارو توی یک فایل txt یه جایی ذخیره کنم. دفعات بعدی که میخواد فایل هارو کپی کنه اسم هارو با اسم هایی که توی فایل txt نوشته شده چک میکنه، هر اسمی که جدید بود متوجه میشه اون فایل تکراری نیست. بعد فایل رو کپی میکنه و همچنین فایل txt رو آپدیت میکنه.

از طرفی چون کلا کارم با windows هست نیاز به برنامه نویسی یه سیستم فایلینگ cross platform ندارم. به نظرت با سرآیند windows.h میشه این کار رو انجام داد ؟ چطوری ؟