PDA

View Full Version : مشکل در فشرده کردن دیتابیس



Collector
یک شنبه 23 مرداد 1390, 15:43 عصر
سلام

اگر بین Ali , Reza فاصله باشد برنامه اجرا نمیشود.چه کار کنم.

try
{
System.Diagnostics.Process.Start("Rar", "a -ap C:\1\Ali Reza\Backup.cbak -p[100] C:\1\Ali Reza\Backup.bak");
}
catch (Exception X)
{
MessageBox.Show(X.Message);
}

Esmail Solhkhah
یک شنبه 23 مرداد 1390, 21:28 عصر
سلام دوست عزیز

فایل بکاپ رو بصورت یه Memory Stream بخونید و با 7z SDK فشرش کنید و نهایتا بصورت فایل فشرده ذخیرش کنید

نیازی به استفاده از نرم افزار جانبی برای فشرده سازی نیست

با این دوتا متد هم فایل رو به Memory Stream و برعکس تبدیل کنید


public static MemoryStream FileToMemoryStream(string filePath)
{
FileStream fs = File.OpenRead(filePath);
byte[] b = new byte[fs.Length];
fs.Read(b, 0, b.Length);
fs.Close();
MemoryStream ms = new MemoryStream();
ms.Write(b, 0, b.Length);
return ms;
}

public static void MemoryStreamToFile(MemoryStream ms, string FilePath)
{
FileStream fs = File.OpenWrite(FilePath);
fs.Write(ms.GetBuffer(), 0, (int)ms.Length);
fs.Close();
}


7z SDK رو هم تو لینک زیر گذاشتم

http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE/page69

موفق باشید.

Collector
یک شنبه 23 مرداد 1390, 22:44 عصر
سلام دوست من

1- من از اون دو تابع استفاده کردم ولی هیچ خروجی نداشت. ممنون میشم یک مثال عملی همراه با فایل فشرده شده بزنید.
2- من 7z SDK رو دانلود کردم اما متوجه نمیشم چطوری باید ازش استفاده کنم.اگر بیشتر توضیح بدید متشکر میشم.
3- اگر امکان داره اون کدی که در بالا با فایل RAR نوشتم رو اصلاح کنید تا اگر نام پوشه فاصله داشت مشکلی پیش نیاید.

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 13:29 عصر
دوست عزیز این دوتا تابع که نوشتم برای تبدیل فایل به مموری استریم و برعکسه

شما اول بکاپ دیتابیستون رو بصورت مموری استریم بگیرید بعد با کلاسهای موجود در SDK فشردش کنید

بعد همون استریم فشرده رو با MemoryStreamToFile تبدیل به فایل بکاپ خروجی کنید

ضمنا درمورد برنامه خودتون باید مسیر کامل فایل داخل دابل کوتیشن باشه

کد زیر رو ببینید

MemoryStream BackupStream = new MemoryStream();

// do your backup commands

SevenZip.Compression.LZMA.SevenZipHelper2 CompressedBackupStream = new SevenZip.Compression.LZMA.SevenZipHelper2();

MemoryStream Compressed = CompressedBackupStream.compress(BackupStream);


موفق باشید.

Collector
دوشنبه 24 مرداد 1390, 14:51 عصر
ضمنا درمورد برنامه خودتون باید مسیر کامل فایل داخل دابل کوتیشن باشه

من کد رو تغییر دادم ولی این کد فقط در کامند لاین جواب میدهد و در #C جواب نمیدهد.

try
{
System.Diagnostics.Process.Start("Rar", "a -ap "C:\1\Ali Reza\Backup.cbak" -p[100] "C:\1\Ali Reza\Backup.bak"");
}
catch (Exception X)
{
MessageBox.Show(X.Message);
}

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 14:57 عصر
این کد موقع BUILD خطا نمیده ! :متفکر:

Collector
دوشنبه 24 مرداد 1390, 15:31 عصر
این کد موقع BUILD خطا نمیده ! :متفکر:
از همه کاراکترها ایراد میگیره و میگه کد تمام نشده و سیمی کالن رو نگذاشتی.
اگر در کد بالا دقت کنید کد آدرس با رنگ مشکی مشخص شده. در حالی که اگر کد از نظر دستوری درست بود با رنگ آبی مشخص میشد.
لطفا این کد را اجرا کنید و اطلاع دهید.

Unknownlive
دوشنبه 24 مرداد 1390, 15:33 عصر
از همه کاراکترها ایراد میگیره و میگه کد تمام نشده و سیمی کالن رو نگذاشتی.
اگر در کد بالا دقت کنید کد آدرس با رنگ مشکی مشخص شده. در حالی که اگر کد از نظر دستوری درست بود با رنگ آبی مشخص میشد.
لطفا این کد را اجرا کنید و اطلاع دهید.
پشت آدرس یک @ بذار تا همه رو به عنوان یک رشته بخونه ...

Collector
دوشنبه 24 مرداد 1390, 15:41 عصر
پشت آدرس یک @ بذار تا همه رو به عنوان یک رشته بخونه ...

سلام دوست من

این راه را قبلا امتحان کردم جواب نمیده .
اگر ممکنه با یک مثال عملی مشکل رو برطرف کنید.

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 16:25 عصر
جناب Collector عزیز

این خدمت شما نگید نمیشه که بنده کدی بدون تست کردن نمیزارم


try
{
string param1 = "\"C:\\1\\Ali Reza\\Backup.rar\"";
string param2 = "\"C:\\1\\Ali Reza\\Backup.bak\"";

System.Diagnostics.Process.Start(Application.Start upPath + "\\Rar.exe", "a -ap " + param1 + " -p[100] " + param2);
}
catch (Exception X)
{
MessageBox.Show(X.Message);
}

موفق باشید.

Collector
دوشنبه 24 مرداد 1390, 18:15 عصر
جناب Collector عزیز

این خدمت شما نگید نمیشه که بنده کدی بدون تست کردن نمیزارم


try
{
string param1 = "\"C:\\1\\Ali Reza\\Backup.rar\"";
string param2 = "\"C:\\1\\Ali Reza\\Backup.bak\"";

System.Diagnostics.Process.Start(Application.Start upPath + "\\Rar.exe", "a -ap " + param1 + " -p[100] " + param2);
}
catch (Exception X)
{
MessageBox.Show(X.Message);
}

موفق باشید.

حالا اگر بخواهیم مسیر را از یک تکس باکس بگیریم چه؟

خروجی کد شما میشود .

"C:\\1\\Ali Reza\\Backup.bak"
که خوب جواب میدهد.

و اما این کد

string G3 = txtbackup.Text + "\\" + txt_Name.Text + ".bak"

و خروجی این کد

C:\\1\\Ali Reza\\Backup.bak

که در هر صورتی بخواهیم دو تا دابل کوتیشن به آن اضافه کنیم. امکان پذیر نیست.

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 18:17 عصر
برا اینکه داخل استرینگ بتونید گوتیشن بزارید

"\

نکته اصلی این بود بقیش با خودتون.

موفق باشید.

Collector
دوشنبه 24 مرداد 1390, 18:29 عصر
برا اینکه داخل استرینگ بتونید گوتیشن بزارید

"\

نکته اصلی این بود بقیش با خودتون.

موفق باشید.

خیلی ممنون
مشکل با این کد حل شد.


string G2 = "\"" + txtbackup.Text + "\\" + txt_Name.Text + ".cbak\"";
string G3 = "\"" + txtbackup.Text + "\\" + txt_Name.Text + ".bak\"";

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 18:33 عصر
خواهش میکنم

فقط آخرش به حرفم میرسید که استفاده از فایل خارجی یکم ...

موفق باشید.

Collector
دوشنبه 24 مرداد 1390, 18:45 عصر
خواهش میکنم

فقط آخرش به حرفم میرسید که استفاده از فایل خارجی یکم ...

موفق باشید.

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

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 18:58 عصر
مشکلات امنیتی استفاده از فایل خارجییکیش شبیه سازی فایل مورد استفاده برنامه شما اما با کاربردی دیگه

در صورت ویروسی شدن rar.exe یا عدم کارکرد صحیح اون ...

حالا ما یه چیزی گفتیم زیاد جددی نگیرید


اگر امکانش هست مزایای استفاده از کد شما رو بگیدمیزان فشرده سازی بالا بعلت استفاده از الگوریتم LZMA

عدم نیاز به فایل خارجی

سرعت اجرای بالا و ...

Collector
دوشنبه 24 مرداد 1390, 19:18 عصر
در صورت ویروسی شدن rar.exe یا عدم کارکرد صحیح اون ...فایل rar رو بایند میکنم با فایل اجرایی برنامه.


میزان فشرده سازی بالا بعلت استفاده از الگوریتم LZMAفکر نکنم فشرده تر از rar بشه لطفا یک نمونه رو امتحان کنید و نتیجه رو اعلام کنید.

در ضمن از اینکه وقت گذاشتین و به سوالات من پاسخ دادید متشکرم.:قلب::قلب::قلب:

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 19:26 عصر
فایل rar رو بایند میکنم با فایل اجرایی برنامه

در اینصورت احتمالا آنتی ویروسها چپ چپ نگاش کنن



فکر نکنم فشرده تر از rar بشه

شما یه فایل انتخابی خودتون رو با rar و بعدش با 7z فشرده کنید

نتیجرو ببینید.



در ضمن از اینکه وقت گذاشتین و به سوالات من پاسخ دادید متشکرم

خواهش میکنم دوست عزیز ما هممون اینجا داریم یاد میدیم و یاد میگیریم

موفق باشید.

Collector
دوشنبه 24 مرداد 1390, 19:58 عصر
دوست من کمک میکنی این مشکل رو که آخرین مشکل از فشرده سازی رو حل کنی.
هر چی فکر میکنم متوجه نمیشم که چرا با وجود این سه خط نباید فایل رو پیدا کنه.اگر این سه خط رو کامنت کنم مشکلی پیش نمیاد.

OpenFileDialog Res1 = new OpenFileDialog();
Res1.Filter = "Backup Files(*.Cbak)|*.Cbak";
Res1.ShowDialog();

کد بکاپ گیری

try
{

OpenFileDialog Res1 = new OpenFileDialog();
Res1.Filter = "Backup Files(*.Cbak)|*.Cbak";
Res1.ShowDialog();

Process myProcess = new Process();
myProcess.StartInfo.FileName = "UnRAR";
//myProcess.StartInfo.Arguments = "e -ap " + Res1.FileName + " -p[100] C:/1/";

myProcess.StartInfo.Arguments = "e -ap c:/1/BackUp.cbak -p[100] C:/1/";
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.EnableRaisingEvents = true;
myProcess.Start();

MessageBox.Show(".بازیابی فایل پشتیبان انجام شد");
}
catch (Exception ex) // ایجاد فایل خطای ران تایم
{
MessageBox.Show(ex.Message);
}



شما یه فایل انتخابی خودتون رو با rar و بعدش با 7z فشرده کنید

نتیجرو ببینید.

تست کردم.
2.33 =فایل بکاپ
180 =7z
rar=212

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 20:05 عصر
این کد موردی نداره

string fileName= "";

OpenFileDialog Res1 = new OpenFileDialog();
Res1.Filter = "Backup Files(*.Cbak)|*.Cbak";
if (Res1.ShowDialog() == DialogResult.OK)
fileName = Res1.FileName;
تست کردم.
2.33 =فایل بکاپ
180 =7z
rar=212

تو هردوشون میزان فشرده سازی رو برابر گرفتید؟

اگه ممکنه همون فایل رو برام بفرستید

Collector
دوشنبه 24 مرداد 1390, 20:20 عصر
و هردوشون میزان فشرده سازی رو برابر گرفتید؟

اگه ممکنه همون فایل رو برام بفرستید

بله دیفالت رو تغییر ندادم.
این یک نمونه فایل دیتابیس

1.18 = فایل
68.5 = 7z
rar = 82.5

Collector
دوشنبه 24 مرداد 1390, 20:29 عصر
این کد موردی نداره


string fileName= "";

OpenFileDialog Res1 = new OpenFileDialog();
Res1.Filter = "Backup Files(*.Cbak)|*.Cbak";
if (Res1.ShowDialog() == DialogResult.OK)
fileName = Res1.FileName;


با جا گذاری این کد مشکل حل نشد و این پیغام را داد.

The system cannot find the file specified

Esmail Solhkhah
دوشنبه 24 مرداد 1390, 20:38 عصر
مورد اول : شما اگه کامپرس ریت رو تو هر دو نرم افزار بذارید ماکس نتیجه اینه

7z = 68K
Rar = 83K

شرمنده اینجا فایلهای 7z رو نمیشه گذاست خودتون تست کنید اگر هم خاستید آپشون میکنم لینک میدم تا مطمئن شید.

مورد دوم : کد رو کامل بزارید و بگید چه موقع این خطا رو میده

Collector
دوشنبه 24 مرداد 1390, 21:14 عصر
مورد دوم : کد رو کامل بزارید و بگید چه موقع این خطا رو میدهاین برنامه قرار هست فایل rar را بگیرد و فایل استخراج شده را در \:C قرار دهد.
اما این اررور را نمایش میدهد.

The system cannot find the file specified

Esmail Solhkhah
سه شنبه 25 مرداد 1390, 00:52 صبح
try
{
string fileName = "";
OpenFileDialog Res1 = new OpenFileDialog();
Res1.Filter = "Backup Files(*.rar)|*.rar";
if (Res1.ShowDialog() == DialogResult.OK)
{
fileName = Res1.FileName;
Process myProcess = new Process();
myProcess.StartInfo.FileName = Application.StartupPath + "\\UnRAR.exe";
myProcess.StartInfo.Arguments = "e -ap " + Res1.FileName + " -p[100] C:\\1";
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.EnableRaisingEvents = true;
myProcess.Start();

MessageBox.Show(".بازیابی فایل پشتیبان انجام شد");
}
else
{
MessageBox.Show("Error");
}

}
catch (Exception ex) // ایجاد فایل خطای ران تایم
{
MessageBox.Show(ex.Message);
}


موفق باشید.