PDA

View Full Version : ذخیره رشته در متغیر باینری



mahdiehjoon69
سه شنبه 08 مهر 1393, 12:02 عصر
سلام
من یه فایل صوتی رو توی بانکم ذخیره کردم (با linq) به صورت باینری بعد اون رو exportکردم و توی یک فایل textذخیره کردم.
تا اینجای کار مشکلی نیست.
اما حالا می خوام فایل text رو import کنم به برنامه چون به صورت string هست نمیتونه تو باینری بریزه طبیعتا.
روش های convertهم بدرد من نمیخوره چون من باید همین داده ای که دارم رو به صورت باینری بریزم تا فایل صوتیم اجرا بش .
کسی می تونه در این رابطه کمکم کنه؟؟؟

plus
سه شنبه 08 مهر 1393, 15:00 عصر
با استفاده از متد System.IO.File.ReadAllBytes فایل مورد نظر رو به صورت آرایه ای از بایت بخونید.

mahdiehjoon69
چهارشنبه 09 مهر 1393, 09:59 صبح
با استفاده از متد System.IO.File.ReadAllBytes فایل مورد نظر رو به صورت آرایه ای از بایت بخونید.
ممنون دوستم
این رو قبلا امتحان کردم اینجوری دوباره میاد اطلاعات ب باینری تبدیل میکنه در نتیجه فایل صوتیم خراب میشه.باید ی راهی باشه ک بدون تبدیل بریزه توش

juza66
چهارشنبه 09 مهر 1393, 10:14 صبح
var bytes = File.ReadAllBytes(fileName);

mahdiehjoon69
چهارشنبه 09 مهر 1393, 11:05 صبح
var bytes = File.ReadAllBytes(fileName);
مرسی دوستم گفتم ک این روش جواب نمیده داده هام عوض میشه

juza66
چهارشنبه 09 مهر 1393, 11:13 صبح
خواندن یک فایل باینری



using (FileStream fs = new FileStream(@"sampleFile.bin", FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs, new ASCIIEncoding()))
{
byte[] chunk;

chunk = br.ReadBytes(1024);
while(chunk.Length > 0)
{
ConsumeBytes(chunk);
chunk = br.ReadBytes(1024);
}
}
}


سورس
http://www.rwejahad.blogfa.com/post/31


تایپیک زیر در وی بی دات نت هستش
http://barnamenevis.org/showthread.php?351351-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%81%D8%A7%DB%8C%D9%84-%D8%A8%D9%87-%DA%A9%D8%AF-%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C-%D9%88-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%DA%A9%D8%AF-%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C-%D8%A8%D9%87-%D9%87%D9%85%D8%A7%D9%86-%D9%81%D8%A7%DB%8C%D9%84

mahdiehjoon69
چهارشنبه 09 مهر 1393, 11:33 صبح
این تاپیک دیدم قبلا
من صدا رو تو بانک ذخیره کردم بازیابی کردم اجرا کردم مشکلی تو این زمینه ندارم
من خروجی برنامه ام ی فایل تکست که همه اطلاعات بانکم از جمله همین فایل صوتی رو توش ذخیره میکنه این امکان هم تو برنامه هس ک کاربر اگ خواست فایل تکست رو به برنامه importکنه تا بتونه ویرایش و حذف و...رو انجام بده یا چیزی به بانک اضافه کنه
حالا مشکل من اینکه موقعی ک دارم import میکنم و اطلاعات رو دوباره تو بانک ذخیره میکنم واسه درج صوت نمیتونه اطلاعات string رو تو فیلد بانکم ک باینری بریزه.روش های مختلف convertهمه رو امتحان کردم حتی اون قسمت مربوط ب صوت ریختم توی ی فایل جدا و با همین روش ک شما فرمودین خوندم اما بازم نشد داده ها عوض میشه.

juza66
چهارشنبه 09 مهر 1393, 11:40 صبح
من صدا رو تو بانک ذخیره کردم بازیابی کردم اجرا کردم مشکلی تو این زمینه ندارم

بله، کد رو لطف میکنید بذارید


من خروجی برنامه ام ی فایل تکست که همه اطلاعات بانکم از جمله همین فایل صوتی رو توش ذخیره میکنه

خوب چرا فایل تکست (هم دیتابیس هم فایل باینری شده تویی یک فایل تکست!)


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

بله ..


الا مشکل من اینکه موقعی ک دارم import میکنم و اطلاعات رو دوباره تو بانک ذخیره میکنم واسه درج صوت نمیتونه اطلاعات string رو تو فیلد بانکم ک باینری بریزه

خوب همانطور که قبل گفتم یکم غیرمنطقی و غیراصولی شما کار میکنید، فکر کنم ایراد کار در همینجا باشه



شما لطف کنید سورس یا کد بذارید من تست کنم و یک راه حل اگه شد پیدا کنم براتون :چشمک:

mahdiehjoon69
چهارشنبه 09 مهر 1393, 11:54 صبح
صدای من خیلی کوتاهه درحد چند ثانیه مجبورم تو فایل تکست ذخیره کنم چون خروجی این برنامه توی ی برنامه دیگ استفاده میشه در اصل برنامه فقط واسه تولید دیتابیسه.باشه میذارم
لطف میکنین

mahdiehjoon69
چهارشنبه 09 مهر 1393, 13:37 عصر
فایل تکست من به این صورته


1@"//tCxAAACRpAihijgAFAyCFD"
2@"yhtEddsAkjJJYdftfhytSSgy"

البته برای شلوغ نشدن اینجا فقط همین دو تا فیلد رو گذاشتم.

اینم قسمتی که واسه export استفاده کردم:

sing (StreamWriter sw = File.CreateText(saveFileDialog.FileName))
{


var query = from it in objDBAndroidDataContext.tblWords orderby it.ID select it;
foreach (tblWord wt in query)
{
sw.WriteLine(wt.ID + "@"+wt.Pronunciation);
}
}


این قسمتی که من برای import استفاده کردم:

while ((line = sr.ReadLine()) != null)
{
tblWord objtblWord = new tblWord();


string[] sID = line.Split('@');

objtblWord.Word = sID[0];

objtblWord.Pronunciation =sID[1];//طبیعتا این خط خطا میده


objDBAndroidDataContext.tblWords.InsertOnSubmit(ob jtblWord);


objDBAndroidDataContext.SubmitChanges();

}
}






نوع فیلد صوت من :(Pronunciation-->varbinary(max
من تمام روش های convert رو امتحان کردم حتی اومدم فیلد مربوط به صوتم رو تو یه فایل تکست جدید ذخیره کردم بعد با ReadAllByteخوندمش اما نشد
هیچکدوم خطا نمیدن همه اطلاعات میخونن به باینری هم تبدیل میکنن
امامن نمیخوام که به باینری تبدیل بش من فقط میخوام همین رشته که باینری هم هست و حالا تو متغیر stringبه همون صورت باینری تو بانک ذخیره بشه.

rahnema1
چهارشنبه 09 مهر 1393, 17:27 عصر
این را امتحان کنید:


objtblWord.Pronunciation = new System.Data.Linq.Binary( Convert.FromBase64String( sID[1].Trim('"')));

mahdiehjoon69
چهارشنبه 09 مهر 1393, 19:23 عصر
این را امتحان کنید:


objtblWord.Pronunciation = new System.Data.Linq.Binary( Convert.FromBase64String( sID[1].Trim('"')));

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

rahnema1
چهارشنبه 09 مهر 1393, 22:00 عصر
فقط میشه لطف کنین راجب ایت تابع تبدیل ی توضیح کوچیک بدید
بازم ممنون

می دونیم که وقتی با استفاده از linq به یک فیلد از نوع varbinarymax دسترسی پیدا می کنیم اون به صورت Linq.Binary ذخیره میشه
یک متغیر از نوع Binary که تبدیل به String می خواهد بشه به رشته base64 تبدیل میشه ( یک روش برای نمایش داده های باینری به صورت رشته)
همچنین در دوطرف اون هم "" قرار می گیره که باید حذف بشه