PDA

View Full Version : فشرده سازی داده های باینری



elderado
شنبه 21 دی 1392, 19:03 عصر
با سلام و خسته نباشید خدمت همه ی مهندسین عزیز
دوستان آیا میشه اطلاعات یک فایل پی دی اف یا ورد رو که به باینری تبدیل شده و آماده ی اینزرت شدن به پایگاه داده هست رو فشرده سازی کرد؟
یا راهی هست که اطلاعات قبل از تبدیل شدن به باینری فشرده بشن؟

rahnema1
شنبه 21 دی 1392, 19:10 عصر
معمولا فایلهای ورد به صورت فشرده هستند اما در دات نت هم میشه توسط کلاس system.io.compression.gzipstream فشرده سازی کرد توی همین سایت هم نحوه استفاده از همین کلاس آموزش داده شده بود، جستجو کنید

elderado
شنبه 21 دی 1392, 19:13 عصر
درمورد فایل های پی دی اف چی؟

rahnema1
شنبه 21 دی 1392, 19:30 عصر
فرقی نمی کنه می خواد ورد باشه پی دی اف باشه هر چی رو فشرده می کنه اما در صورتی مفید خواهد بود که داده های اصلی فشرده نباشند در مورد پی دی اف هم ذکر این نکته لازمه که بعضی پی دی اف ها به علت اینکه داخلشون عکسهایی با سایز بزرگ هست حجمشون زیاد میشه شما با هر روش هم فشرده کنید به علت اینکه سایز تصویر بی جهت بزرگه فایده ای نداره راهش اینه قبل از وارد شدن به دیتابیس توسط یه سری نرم افزار رزلوشن عکسهای داخل پی دی اف را پایین بیاورید اگه نمی خواهید به خودتون زحمت بدید که همون gzstream تا جایی که بتونه فشرده می کنه

elderado
شنبه 21 دی 1392, 19:45 عصر
دوست عزیز میشه روش استفاده از gzipstream رو برام توضیح بدین لطفا؟
ممنون میشم.
این کدی هست که باهاش فایل ها رو به باینری تبدیل میکنم و اینزرت میکنم. چه تغییری باید توی این کد بدم؟

FolderBrowserDialog openfile = new FolderBrowserDialog();
if (openfile.ShowDialog() == DialogResult.OK)
{
DirectoryInfo dr = new DirectoryInfo(openfile.SelectedPath);
var directories = dr.GetDirectories();
int cc = 0, kh = 0;
listBox1.Items.Clear();
foreach (var directory in directories)
{

ListAllFiles(directory.FullName);
c = listBox1.Items.Count;
}
// listBox2.Items.Clear();
FileInfo fi;
FileStream fs;
BinaryReader br;
SqlParameter fileP;
SqlParameter name;
SqlParameter add;
SqlCommand myCommand;
SqlConnection conn;
byte[] bytes;

progressBar1.Visible = true;
progressBar1.Maximum = c;
progressBar1.Minimum = 0;
progressBar1.Step = 1;
for (int i = 0; i < c; i++)
{
//pro();

// if (i%400==0)
// {
// MessageBox.Show("inserting\r\ncount:"+i.ToString()+"");

// }

byte[] jalal = null;
fi = new FileInfo(listBox1.Items[i].ToString());
fs = new FileStream(listBox1.Items[i].ToString(), FileMode.Open, FileAccess.Read);
br = new BinaryReader(fs);
long totalbytes = new FileInfo(listBox1.Items[i].ToString()).Length;
jalal = br.ReadBytes((Int32)totalbytes);
fs.Close();
fs.Dispose();
br.Close();
bytes = File.ReadAllBytes(listBox1.Items[i].ToString());
fileP = new SqlParameter("@file", SqlDbType.VarBinary);
fileP.Value = bytes;
name = new SqlParameter("@pname", SqlDbType.NVarChar);
name.Value = fi.Name;
add = new SqlParameter("@padd", SqlDbType.NVarChar);
add.Value = listBox1.Items[i].ToString();
myCommand = new SqlCommand();
myCommand.Parameters.Add(fileP);
myCommand.Parameters.Add(name);
myCommand.Parameters.Add(add);
conn = new SqlConnection(@"Data Source=.;Initial Catalog=pdf;Integrated Security=True");
if (conn.State != ConnectionState.Open)
conn.Open();
myCommand.Connection = conn;
myCommand.CommandText = "spPdfInsert";
myCommand.CommandType = CommandType.StoredProcedure;
progressBar1.PerformStep();

// Thread.Sleep(50);
try
{
myCommand.ExecuteNonQuery();

}
catch
{
kh++;
eror += this.listBox1.Items[i].ToString() + "\r\n";
}

conn.Close();
cc++;
}

rahnema1
شنبه 21 دی 1392, 21:20 عصر
اول این دو تا را بذارید


using System.IO.Compression;
using System.IO;




FolderBrowserDialog openfile = new FolderBrowserDialog();
if (openfile.ShowDialog() == DialogResult.OK)
{
DirectoryInfo dr = new DirectoryInfo(openfile.SelectedPath);
var directories = dr.GetDirectories();
int cc = 0, kh = 0;
listBox1.Items.Clear();
foreach (var directory in directories)
{
ListAllFiles(directory.FullName);
c = listBox1.Items.Count;
}
// listBox2.Items.Clear();
FileInfo fi;
FileStream fs;
BinaryReader br;
SqlParameter fileP;
SqlParameter name;
SqlParameter add;
SqlCommand myCommand;
SqlConnection conn;
byte[] bytes;

progressBar1.Visible = true;
progressBar1.Maximum = c;
progressBar1.Minimum = 0;
progressBar1.Step = 1;
for (int i = 0; i < c; i++)
{
//pro();

// if (i%400==0)
// {
// MessageBox.Show("inserting\r\ncount:"+i.ToString() +"");

// }

byte[] jalal = null;
fi = new FileInfo(listBox1.Items[i].ToString());
fs = new FileStream(listBox1.Items[i].ToString(), FileMode.Open, FileAccess.Read);
br = new BinaryReader(fs);
long totalbytes = new FileInfo(listBox1.Items[i].ToString()).Length;
jalal = br.ReadBytes((Int32)totalbytes);
fs.Close();
fs.Dispose();
br.Close();
bytes = File.ReadAllBytes(listBox1.Items[i].ToString());
byte[] byte2;
using (Stream st = new MemoryStream()){
using (GZipStream gz = new GZipStream(st,CompressionMode.Compress)){
gz.Write(bytes,0,bytes.Length);
byte2= new byte[st.Length];
st.Seek(0, SeekOrigin.Begin);
st.Read(byte2,0,(int)st.Length);
}}
fileP = new SqlParameter("@file", SqlDbType.VarBinary);
fileP.Value = byte2;
name = new SqlParameter("@pname", SqlDbType.NVarChar);
name.Value = fi.Name;
add = new SqlParameter("@padd", SqlDbType.NVarChar);
add.Value = listBox1.Items[i].ToString();
myCommand = new SqlCommand();
myCommand.Parameters.Add(fileP);
myCommand.Parameters.Add(name);
myCommand.Parameters.Add(add);
conn = new SqlConnection(@"Data Source=.;Initial Catalog=pdf;Integrated Security=True");
if (conn.State != ConnectionState.Open)
conn.Open();
myCommand.Connection = conn;
myCommand.CommandText = "spPdfInsert";
myCommand.CommandType = CommandType.StoredProcedure;
progressBar1.PerformStep();
// Thread.Sleep(50);
try
{
myCommand.ExecuteNonQuery();
}
catch
{
kh++;
eror += this.listBox1.Items[i].ToString() + "\r\n";
}
conn.Close();
cC++‎;
}