PDA

View Full Version : سوال: كپي محتويات يك پوشه در پوشه ديگر



ali_ahr7
یک شنبه 25 بهمن 1388, 10:15 صبح
سلام به همه مهندسين محترم.
من يه سوال داشتم و اون اينه كه چطور (با چه كدي) ميشه به محض باز شدن برنامه محتويات يك پوشه در پوشه ديگر كپي كرد؟
مثلا برنامه به محض باز شدن محتويات پوشه mydocumebt رو در c:\
كپي كنه.
متشكرم ار توجهتون.

amin1softco
یک شنبه 25 بهمن 1388, 10:47 صبح
یک راه ساده استفاده از دستورات خود داسه که xcopy به کار شما میاد و با دستور system در سر فایل stdlib.h اگه اشتباه نکنم به راحتی می شه این کار رو انجام داد یک راه دیگه وجود داره و موردی است که شما می خواهید برنامه شما در بیشتر پلاتفرم ها قابل استفاده باشه اینجا بهتره لینک زیر را مشاهده کنید:
http://www.boost.org/doc/libs/1_42_0/libs/filesystem/doc/index.htm

کپی یک فولدر با api های ویندوز :
http://msdn.microsoft.com/en-us/library/xbfwysex%28VS.85%29.aspx

Salar Ashgi
یک شنبه 25 بهمن 1388, 13:54 عصر
برای کپی فولدر زیاد دستور سر راستی وجود نداره ، ولی میتونید با داشتن آدرس فایلها و

با یک حلقه فایل های اون فولدر رو تک به تک کپی کنید :

مثال نمونه :



#include <iostream>
#include <conio>
#include <stdlib>
int main(){
system("copy E:\ispc.png D:\ispc.png");
getch();
}


موفق باشید .

__Genius__
یک شنبه 25 بهمن 1388, 14:30 عصر
salar_cpp_cs @
یکی از غیر استاندارد ترین راه هارو معرفی کردین دوست عزیز ... :)

ali_ahr7 @
به منظور انجام این کاری رو که شما قصد دارین انجام بدین ، 2 تابع رو باید استفاده کنید :
FindFirstFile
FindNextFile
نمونه کدش رو داخل قسمت "نمونه برنامه های نوشته شده با ++C/C گذاشتم ،
تا زمانی که شرط حلقه FindNextFile برقرار باشه شما متوجه میشین که هنوز فایل در داخل پوشه موجود هست ، پس عملیات کپی باید تا صحیح بودن این شرط انجام بشه ،
تابعی هم که برای این کار باید استفاده کنید ()CopyFile هست ،


BOOL CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists
);

و اما در مورد اون قضیه ای که گفتین به محض باز شده MyDocument یکمی بیشتر توضیح بدین میتونم کمکتون بکنم .

Salar Ashgi
یک شنبه 25 بهمن 1388, 15:23 عصر
یکی از غیر استاندارد ترین راه هارو معرفی کردین


+ شما اول گفته خودتون رو اثبات کنید و بعد فتوا صادر کنین .

+ این روش اتفاقا یکی از ساده ترین و بهترین روش هاست .

+ یعنی روشی رو که شما بلدی ، یعنی بهترینه ؟

+ ***) در ارسال پست هایتان دقت بیشتری داشته باشید .

__Genius__
یک شنبه 25 بهمن 1388, 15:43 عصر
salar_cpp_cs @
قصد توهین نداشتم دوست محترم ، اما دلایل غیر استاندارد بودن روش شما :
- در وهله اول خودتون هم اشاره کردین ، با فرض داشتن نام کلیه فایلها ، چه تضمینی وجود داره که فایلها انگشت شمار باشن ؟ اگر فایلها تعدادشون بالای 300 تا بود آیا باز هم چنین پیشنهادی عاقلانه خواهد بود؟
- در وهله دوم ، استفاده از تابع ()System و بکار گیری اون در موارد خاص مجاز هست ، وقتی API بسیار کارآمدی مثل ()CopyFile وجود داره آیا منطقی هست که از تابع ()System برای این کار استفاده بشه؟
- مورد آخر هم اینکه بکارگیری روشی که شما گفتین با ایجاد حلقه For یا While به هر صورت باعث ایجاد Flaw در برنامه خواهد شد .

پیوست : بنده قصد توهین نداشتم و تنها منباب اطلاع عرض کردم ... اگر لحن به طور نامناسبی به کار گرفته شده عذر خواهی میکنم .

Salar Ashgi
یک شنبه 25 بهمن 1388, 16:38 عصر
این مورد رو هم میگم و انتظار ندارم دیگه روی این مورد بحث بشه :



چه تضمینی وجود داره که فایلها انگشت شمار باشن ؟ اگر فایلها تعدادشون بالای 300 تا بود


بالاخره هر روشی معایب و محاسنی دارد و در هر زمانی ممکن است روش خاصی مناسب باشد .

فکر عاقلانه : پوشه my document عموما بخشی از درایوی هستش که ویندوز تو اون نصب شده ، پس

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

بوده و عملیات سیستم عامل سریعا انجام شود و ضمن اینکه این دوستمون بحثی از تعداد فایل هاشون

نکردن !



استفاده از تابع ()System و بکار گیری اون در موارد خاص مجاز هست ، وقتی API بسیار کارآمدی مثل ()CopyFile وجود داره آیا منطقی هست که از تابع ()System برای این کار استفاده بشه؟


کی این حرف رو گفته ؟ نظر شخصی را نمیتوان که تبدیل به یک اجبار کرد ؟

تا زمانیکه درست برنامه نویسی کنیم ، روشها هر چند متفاوت باشند ولی برنامه ما درست است .



کارگیری روشی که شما گفتین با ایجاد حلقه For یا While به هر صورت باعث ایجاد Flaw در برنامه خواهد شد


باز امتحان نکرده یک حرفی را گفتید .

با بکار گیری یک iterator و استفاده از vector ها بسادگی و خالی از خطا اینکار انجام خواهد شد .

ali zi zeperto
یک شنبه 25 بهمن 1388, 17:45 عصر
من شخصا در این مورد راهی ندارم ولی می خوام نظرم رو روی پیشنهادهای دوستان بگم.
به نظر من استفاده تابع system کلی تره چون من که کاربر لینوکس هم هستم می تونم از این تابع استفاده کنم ولی دسترسی به api ها رو ندارم.اما اینکه اسم تمام فایلهای توی یه فولدر هم بدونیم کلیت نداره و اگر هم بدونیم به قول دوستمون اگر ۱۰۰ تا باشن نوشتن ۱۰۰ تا دستور برای کپی کردن به فرض که اسم همه رو هم داشته باشیم کمی سخته.اگر در دستور کپی که از علایم جایگزینی استفاده شده استفاده بشه مسلما کامل تره.
در کل استفاده از تابع سیستم رو مناسب تر می دونم چون عملیات رو به برنامه هم واگذار نمی کنه.نمی دونم چطور بیان کنم ولی با تابع سیستم اطمینان بیشتری هم هست.
نظر من بود.

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

ali_ahr7
یک شنبه 25 بهمن 1388, 22:46 عصر
سلام به تمامي دوستان.
اول از همه اينكه واقعا از توجهتون ممنونم.به نظر من اين عاليه كه ميشه تجربه هاي به اين با ارزشي رو اينطور رد و بدل كرد.
مسئله بعد هم اينكه من با توجه به راهنمايي دوستان به پاسخ سوالم رسيدم.بازم ازتون تشكر ميكنم.موفق باشيد.