PDA

View Full Version : مشکل با نوع varbinery در data grid view



hojjjat
شنبه 23 شهریور 1392, 17:52 عصر
سلام
برای خواندن فایل که بصورت باینری ذخیره کردم با این خطلا مواجعه میشم میخواستم بدونم مشکل از کجاست؟؟؟؟؟
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog()==System.Windows.Forms.DialogResu lt.OK)
{
byte[] filebytee = Convert.ToByte(dataGridView1.CurrentRow.Cells[1].Value);
File.WriteAllBytes(sfd.FileName, filebytee);
MessageBox.Show("okkkk");


}

parvizwpf
شنبه 23 شهریور 1392, 19:11 عصر
فایل ذخیره میشه؟ پسوندش صحیحه؟

hojjjat
یک شنبه 24 شهریور 1392, 09:13 صبح
مشکل رو این خطه
byte[] filebytee = Convert.ToByte(dataGridView1.CurrentRow.Cells[1].Value);
مینویسه نمیتونه byte رو به byte[] تبدیل کنه!!!!

farhad.k.t
یک شنبه 24 شهریور 1392, 11:27 صبح
بهتر است از binary reader و binary writer و filestream استفاده کنید...
private void binarywriting()
{
byte[] n = { 105, 102, 106 };
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
System.IO.FileStream s = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write, FileShare.Write);
BinaryWriter b = new BinaryWriter(s);
b.BaseStream.Write(n, 0, n.Count());
b.Close();
}
}
private byte[] binaryreading()
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
System.IO.FileStream s = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryReader rd = new BinaryReader(s);
return rd.ReadBytes((int)s.Length);
}
else
return null;
}
و در باتن مربوط به خواندن باینری کد زیر را بنویسید:
if (binaryreading () != null)
{
foreach (byte item in binaryreading())
{
MessageBox.Show(item.ToString());
}
}

hojjjat
یک شنبه 24 شهریور 1392, 16:46 عصر
در کجا فایلو بدم به دیتا بیس و در کجا و چطوری ازش بخونم/؟؟؟؟؟؟

farhad.k.t
یک شنبه 24 شهریور 1392, 18:45 عصر
بستگی به کاری که شما می خواهید انجام دهید دارد، می توانید فایل هایی را که کاربر Save می کند را در DB ذخیره کنید و سپس آن ها را در یک گرید در اختیار کاربر قرار دهید تا برای باز کردن از گرید انتخاب کند... می توانید به کاربر اجازه دهید یک فایل را انتخاب کند و چندین خروجی دریافت کند(مانند برنامه ی FileCutter که یک فایل را به چند قسمت تقسیم می کند)و...

فکر می کنم سورس برنامه ی زیر به شما کمک کند...

FileCutter:
http://csharpedu.persiangig.com/file_cutter.rar/download

hojjjat
یک شنبه 24 شهریور 1392, 20:27 عصر
برای خوندن از گرید ویوو به مشکل بر میخورم خطای تبدل میده
byte[] n =(byte[]) DGv.CurrentRow.Cells[1].Value.ToString();

farhad.k.t
یک شنبه 24 شهریور 1392, 23:54 عصر
خوب شما دارید یک object را به آرایه ای از بایت ها تبدیل می کنید...
بهتر است که مقادیر را با یک کاراکتر مشخص از هم جدا کنید و سپس با تابع split مقادیر را وارد آرایه کنید...

hojjjat
دوشنبه 25 شهریور 1392, 11:15 صبح
خوب شما دارید یک object را به آرایه ای از بایت ها تبدیل می کنید...
بهتر است که مقادیر را با یک کاراکتر مشخص از هم جدا کنید و سپس با تابع split مقادیر را وارد آرایه کنید...
میشه کدشو بنویسین من متوجه نمیشم...خیلی ممنونم

farhad.k.t
دوشنبه 25 شهریور 1392, 14:46 عصر
سلام
اگر تعداد byte های مشخصی را write می کنید می توانید از کد زیر در هنگام فراخوانی تابع binaryreading استفاده کنید:

byte[] a = binaryreading();
dataGridView1[0, 0].Value = a[0] + "," + a[1] + "," + a[2];

در غیر این صورت از کد زیر استفاده کنید:

string a = "";
foreach (byte item in binaryreading())
{
a += item + ",";
}
dataGridView1[0, 0].Value = a.Substring(0, a.Length - 1);

و برای استفاده از مقادیر گرید همانطور که گفته بودم از تابع split استفاده کنید:

foreach (string item in dataGridView1[0,0].Value.ToString().Split(','))
{
MessageBox.Show(item);
}

برای ذخیره در DB هم مانند دستورات بالا را با دستور Insert استفاده نمایید.

موفق باشید...

hojjjat
دوشنبه 25 شهریور 1392, 16:25 عصر
مشکلم اینجاست که دیتا ها بصورت بایت ذخیره نمیشن ..مثلا دیتای دومی 105, 102, 106 هست که ببینید چی ذخیره شده!!!
110742

farhad.k.t
سه شنبه 26 شهریور 1392, 11:08 صبح
دوست عزیز فکر کنم این تصویر مربوط به آدرس سکتورهاست.
باتوجه به این که اطلاعات موجود در گرید با تابع split فراخوانی می شوند ، نوع داده آن رشته ای می باشد و بهتر است به شکلnvarchar نیز در DB ثبت شوند ، شما می توانید پس از خواندن دیتا از گرید ، آن ها را Convert کنید و به صورت بایت استفاده کنید.(به دلیل استفاده از split باید نوع داده ها رشته ای باشند)

hojjjat
سه شنبه 26 شهریور 1392, 13:19 عصر
دوست عزیز با این روش یک فایل 300 کیلویی حداقل 1 دقیقه زمان میخواد و فکر نمکن روش بهینه ای باشه
اگه ممکنه بگید چطوری نوع varbinery ذخیره شده در DB را به ارایه ای از بایت تبدیل کنم؟؟