PDA

View Full Version : سوال: کپی یک یا چند فایل در c++



R2du-soft
شنبه 10 تیر 1391, 18:07 عصر
سلام
من هرچی دنبال یه روش برای کپی فایل گشتم چیزی گیرم نیومد!!
کسی از دوستان اینو بلده؟
:
میخوام هرچی فایل توی مسیر c:\1 هست رو کپی کنم توی درایو d:\2
با چه دستوری توی c++ باید این کارو کنم؟
کل دستور چطوریه؟
ممنون دوستان
:قلب:

#target
شنبه 10 تیر 1391, 19:34 عصر
اگر میخواهید با توابع سیستم عامل اینکارو کنین (در ویندوز) تابع CopyFile (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851(v=vs.85).aspx)
اما اگر نه میخواهید خودتان تابعی بنویسین که اینکارو انجام بده . فایل مبدا رو برای خواندن باز کنین و فایل مقصد رو برای نوشتن . سپس از فایل مبدا بخوانید (همشو ی جا نه قطعه قطعه) بعد هر قطعه رو که خوندین تو فایل مقصد بنویسن

میخوام هرچی فایل توی مسیر c:\1 هست رو کپی کنم توی درایو d:\2
برای پیدا کردن فایلهای موجود در یک پوشه (برای ویندوز) میشه از توابع FindFirstFile (http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx) , FindNextFile (http://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx) استفاده کرد

R2du-soft
شنبه 10 تیر 1391, 22:33 عصر
ممنون از پاسخگویی سرعتون.
ولی من باز نفهمیدم که چطور این دستور رو پیدا کنم ، کد دستور رو میخوام که باید توی برنامه c++ وارد کنم تا بعد از اجرای فایل exe کامپایل شدم فایل ها از مسیر c:\1 به d:\2 تغییر کنه.
چون توی این زبون برنامه نیسی تازه کارم چیزی زیاد بلد نیستم و تازه دارم یاد میگیرم.
اگه ممکنه بگید چه کدی باید تو فایلم بنویسم تا باز باز کردنش از مسیر c:\1 کپی کنه تو d:\2 .
ممنون

بهروز عباسی
شنبه 10 تیر 1391, 23:37 عصر
این یک تابع برای کپی فایل بدون استفاده از API
#include <fstream>
#include <string>
#include <stdio.h>
#include <iostream>

using namespace std;

//CopyFile is a simple function that copies a file from arg1 to arg2
int CopyFile(string initialFilePath, string outputFilePath)
{

ifstream initialFile(initialFilePath.c_str(), ios::in|ios::binary);
ofstream outputFile(outputFilePath.c_str(), ios::out|ios::binary);
//defines the size of the buffer
initialFile.seekg(0, ios::end);
long fileSize = initialFile.tellg();
//Requests the buffer of the predefined size


//As long as both the input and output files are open...
if(initialFile.is_open() && outputFile.is_open())
{
short * buffer = new short[fileSize/2];
//Determine the file's size
//Then starts from the beginning
initialFile.seekg(0, ios::beg);
//Then read enough of the file to fill the buffer
initialFile.read((char*)buffer, fileSize);
//And then write out all that was read
outputFile.write((char*)buffer, fileSize);
delete[] buffer;
}
//If there were any problems with the copying process, let the user know
else if(!outputFile.is_open())
{
cout<<"I couldn't open "<<outputFilePath<<" for copying!\n";
return 0;
}
else if(!initialFile.is_open())
{
cout<<"I couldn't open "<<initialFilePath<<" for copying!\n";
return 0;
}

initialFile.close();
outputFile.close();

return 1;
}




موفق باشید

بهروز عباسی
شنبه 10 تیر 1391, 23:53 عصر
اگه ممکنه بگید چه کدی باید تو فایلم بنویسم تا باز باز کردنش از مسیر c:\1 کپی کنه تو d:\2 .
این یکی ساده تره و البته با API
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
string Input = "C:\\bla.txt\\";
string Output = "C:\\test\\";

CopyFile(Input.c_str(), string(Output+Input).c_str(), TRUE);

//The file "bla.txt" would now be copied to "test"?
}
موفق باشی

R2du-soft
یک شنبه 11 تیر 1391, 10:04 صبح
:گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه:
:گریه: :گریه: :گریه: :گریه: موقع کامپایل ارورهای الکی میگیره! :گریه: :گریه: :گریه: :گریه:
:گریه: :گریه: :گریه: :گریه: (من با برنامه Turbo.C.v2.0 کامپایل کردم) :گریه: :گریه: :گریه:
:گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه: :گریه:

#target
یک شنبه 11 تیر 1391, 20:08 عصر
Turbo C مربوط DOS اینا تابع ویندوز و همچنین کلاس C++ هستند !!!!! با وجود این همه برنامه جدید چرا هنوز Turbo C ؟؟؟؟

R2du-soft
یک شنبه 11 تیر 1391, 20:36 عصر
شما چه برنامه ای رو پیشنهاد میکنید؟
Borland_Turbo_C Plus Plus_v5.02 میشه؟ خوبه؟
خوب منم میخوام c++ بنویسم دیگه!!!!!

بهروز عباسی
یک شنبه 11 تیر 1391, 22:13 عصر
شما چه برنامه ای رو پیشنهاد میکنید؟
msvc++
Dev C++(gcc)

R2du-soft
دوشنبه 12 تیر 1391, 00:34 صبح
این یکی ساده تره و البته با API
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
string Input = "C:\\bla.txt\\";
string Output = "C:\\test\\";

CopyFile(Input.c_str(), string(Output+Input).c_str(), TRUE);

//The file "bla.txt" would now be copied to "test"?
}
موفق باشی


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

R2du-soft
دوشنبه 12 تیر 1391, 21:08 عصر
:گریه::گریه::گریه::گریه::گریه:
چرا کسی جواب نمیده؟
:گریه:
:گریه:
:گریه:
بعد از کامپایل کردن وقتی بازش میکنم فایل exe رو ، فایلی که تو کد ها گفته شده و موجود هم هست رو به مسیر گفته شده کپی نمیکنه!
:گریه:

R2du-soft
جمعه 16 تیر 1391, 11:52 صبح
دوستان عزیزمن کسی نمیدونه چرا موقع کامپایل خطا میگیره؟
هنوز گیر اینم!!!!!

#target
جمعه 16 تیر 1391, 23:41 عصر
چه خطایی ؟؟؟
تابع کپی فایل فقط برا فایل نه کل پوشه با زیر پوشه هاش . برا ساده تر شدن توابع Shell هستن مثل SHFileOperation (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx)
اگه تابع کار نمیکنه بعدش GetLastError (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx) رو فراخوانی کن ببین کد خطا چیه !

R2du-soft
شنبه 17 تیر 1391, 10:24 صبح
مرسی که جواب دادی #target (http://barnamenevis.org/member.php?90771-target) جان
موقع کامپایل کردن به علائم گیر میده
مثل:

: و \\ که گذاشته میشه به یکی از \ ها گیر میده و کامپایل نمیکنه