نمایش نتایج 1 تا 19 از 19

نام تاپیک: تبدیل یک فایل به آرایه ای از بایت ها ...

  1. #1
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    تبدیل یک فایل به آرایه ای از بایت ها ...

    سلام دوستان
    من به فایلو میخوام با OpenFileDialog بگیرم و اونو تبدیل به []Byte کنم . بعد میخوام اون رو دوباره به حالت اولیه برگردونم . چطوری باید اینکارو انجام بدم . ممنون میشم راهنماییم کنید و اگه کد گذاشتید واسم توضیحش بدید .
    میدونم باید از یه همچین دستوری واسه کانورت کردن استفاده کنم :
     byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
    اما این به تنهایی کافی نیست . یکم گیج شدم .
    یا شایدم باید اونو Stream کنم ... اما بازم نمیدونم چطوری
    ممنون میشم راهنماییم کنید ، خواهشا کدهارو کامل توضیح بدید چون خوش ندارم کپی پیست کنم . باید بفهمم چی به چیه چون ممکنه وسط کار بخوام دسکاریشم بکنم
    با تشکر

  2. #2

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    سلام

    متنی:

    // Open the file to read from.
    string readText = File.ReadAllText(path);
    Console.WriteLine(readText);


    باینری:

    File.ReadAllBytes Method

  3. #3
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

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

  4. #4

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    پس همون File.ReadAllBytes رو استفاده کن بلدی که؟
    کاری نداره مسیر میگیره یه آرایه از نوع byte[] بر می گردونه.

  5. #5
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    44
    پست
    1,046

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    از MSDN بدون نیاز به تلاش و گیج شدن: FileStream.Read Method
    یه مثال ته‌اش هست، هر دوتا حالت هم با توضیحات کامل ذکر شده؛ چرا کپی پیست؟ اونهمه توضیح میده، کجاش رو نمی‌فهمین؟

    • فایل (همون که میخوای با OpenFileDialog بگیری) با خاصیت Read باز میشه -> یک بافر تعریف میشه -> تا زمانیکه بایتی برای خوندن هست می‌خونه -> خوندن تمام
    • برای "دوباره به حالت اولیه" -> از همون بافر که خونده شده می‌ریزه در یک FileStream جدید که فایل رو برای Write باز کرده -> اتمام هلو+برو تو گلو

  6. #6
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    نقل قول نوشته شده توسط tooraj_azizi_1035 مشاهده تاپیک
    پس همون File.ReadAllBytes رو استفاده کن بلدی که؟
    کاری نداره مسیر میگیره یه آرایه از نوع byte[] بر می گردونه.
    نه بلد نیستم ... ممنون میشم اگه بیشتر راهنمایی کنید یا در صورت امکان تیکه کد واسم بذارید و توضیحش بدید

  7. #7
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    نقل قول نوشته شده توسط Saeed_m_Farid مشاهده تاپیک
    از MSDN بدون نیاز به تلاش و گیج شدن: FileStream.Read Method
    یه مثال ته‌اش هست، هر دوتا حالت هم با توضیحات کامل ذکر شده؛ چرا کپی پیست؟ اونهمه توضیح میده، کجاش رو نمی‌فهمین؟

    • فایل (همون که میخوای با OpenFileDialog بگیری) با خاصیت Read باز میشه -> یک بافر تعریف میشه -> تا زمانیکه بایتی برای خوندن هست می‌خونه -> خوندن تمام
    • برای "دوباره به حالت اولیه" -> از همون بافر که خونده شده می‌ریزه در یک FileStream جدید که فایل رو برای Write باز کرده -> اتمام هلو+برو تو گلو
    باب شما حرفه ای هستید !!! من مخم هنک کرد اینحوری گفتید که ... !!!

  8. #8

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    برای تبدیل به آرایه ای از بایتها
    byte[] fileBytes = File.ReadAllBytes("File Path");
    برای نوشتن در فایل
    File.WriteAllBytes("Path", fileBytes);

  9. #9
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    نقل قول نوشته شده توسط mafaman2003 مشاهده تاپیک
    برای تبدیل به آرایه ای از بایتها
    byte[] fileBytes = File.ReadAllBytes("File Path");
    برای نوشتن در فایل
    File.WriteAllBytes("Path", fileBytes);
    ممنون دوست عزیز عالی بود . فقط یه نکته و سوال !!! من میخوام اینو داخل شبکه ارسال کنم . حقیقتا اصل کارم اینه که یه فایل رو از طریق شبکه بفرستم ( Socket ) ولی از اونجایی که هرچی سوال میکنم کسی جواب نمیده یا کدهارو توضیح نمیده یا مثال های سخت میذارن مجبور شدم اینطوری سوالمو بپرسم . خوشبختانه کار میکنه اما الام میخوام اون رو داخل شبکه ارسال کنم .
    اینطوری فرستادمش :
                OpenFileDialog o = new OpenFileDialog();
    o.ShowDialog();
    byte[] fileBytes = new byte[100000];
    fileBytes=File.ReadAllBytes(o.FileName);
    sock.Send(fileBytes, SocketFlags.None);

    و اینطوری داخل سرور گرفتمش :

    int counter;
    byte[] buff = new byte[100000];
    while (true)
    {
    try
    {
    connection.Receive(buff, SocketFlags.None);
    File.WriteAllBytes(@"d:\r.pdf", buff);
    message = Encoding.UTF8.GetString(buff);
    for (counter = 0; counter < 100; counter++)
    buff[counter] = Convert.ToByte(false);
    }
    catch (Exception ex)
    {}

    نکته اینجاس که فایلو کامل نمیگیره !! سایز بافر رو زیاد کردم ( همون آرایه بایت ها ) گفتم شاید جا نشه داخلش اما بازم کامل نیومد !!
    ممنون میشم راهنماییم کنید

  10. #10
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    سلام
    چرا سوکت ؟ راه آسانتر برای ارسال وجود دارد مثل استفاده از DotNet Remoting و یا WCF بنظر من پیاده سازی سوکت سخت تر از پیاده سازی مثلا WCF است در این حالت شما یک متد برای ارسال FileStream طراحی می کنید و دریافت و ارسال را انجام میدهید

  11. #11
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    نقل قول نوشته شده توسط ASKaffash مشاهده تاپیک
    سلام
    چرا سوکت ؟ راه آسانتر برای ارسال وجود دارد مثل استفاده از DotNet Remoting و یا WCF بنظر من پیاده سازی سوکت سخت تر از پیاده سازی مثلا WCF است در این حالت شما یک متد برای ارسال FileStream طراحی می کنید و دریافت و ارسال را انجام میدهید
    دوست عزیز من دارم روی یه برنامه کار میکنم که از طریق Socket و پروتکل TCP/IP اطلاعات رو ارسال میکنم . فرض کن نرم افزار چت !! متن به راحتی ارسال میشه اما واسه ارسال فایل مشکل دارم . اون راهی که دوستمون گفت واقعا مفید و در عین حال راحت بود و بسیااااااااااااار مفید . اما مشکلم اینجاس که توی سمت سرور باید حتما متغییری که از نوع بایت هس یه اندازه خاص داشته باشه و وقتی فایل ارسال میشه حالا حجمش هرچقدر بوده به همون اندازه ای که بافر توی سرور تعریف شده بیرون میاد و مشکل دوم اینکه نمیتونم پسوند فایل دریافتی رو تشخیص بدم !!
    ممنون میشم اگه کسی میدونه منو راهنمایی کنه
    با تشکر

  12. #12
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    من هنوز مشکلم با نوع پسوند و اون آرایه ای که باید تعریف کنم حل نشده . دوستان ممنون میشم راهنمایی کنید یا نظرتون رو بگید یا اگه روشی دارید بهم معرفی کنید

  13. #13
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    چرا به جای استفاده از آرایه از لیست پیوندی و یا لیست استفاده نمی کنی . اینطوری نیاز به تعریف سایز اولیه نیست و می تونی یه آرایه پویا داشته باشی برای تعریف هم می تونی از کد های زیر استفاده کنی :

    اگر نبود

    using System.Collections.Generic;



    List<Byte> Bytes = new List<Byte>();


    Ofd.Filter = "All Files | *.*";
    if (Ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
    Bytes = System.IO.File.ReadAllBytes(Ofd.FileName).ToList() ;
    }


    و برای تبدیل هم :

    System.IO.File.WriteAllBytes(Sfd.FileName, Bytes.ToArray());


    تعریف Linked List هم به صورت زیره :

    LinkedList<Byte> Link_List = new LinkedList<Byte>();

  14. #14
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    از این نوع که تعریف میکنم نمیشه اوی این قسمت قبول نمیکنه :
    connection.Receive(bytes, SocketFlags.None);

  15. #15
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    نقل قول نوشته شده توسط saman_h مشاهده تاپیک
    از این نوع که تعریف میکنم نمیشه اوی این قسمت قبول نمیکنه :
    connection.Receive(bytes, SocketFlags.None);
    connection.Receive(bytes.ToArray(), SocketFlags.None);


    به این صورت بنویس ببین جواب میده ....

  16. #16
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    نقل قول نوشته شده توسط sirvan-me مشاهده تاپیک
    connection.Receive(bytes.ToArray(), SocketFlags.None);


    به این صورت بنویس ببین جواب میده ....
    ارور نداد اما حجم فایلی که دریافت میشه 0 بایت هست !! چیکار کنم ؟

  17. #17
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    این لینک رو ببین ... این دوستمون تو سایت StackoverFlow هم دقیقا مشکل شما رو داره .

    Socket File Transfer sending incomplete files in C#‎‎‎‎

    این لینک ها هم ببین ... نمونه برنامه هاشو دان کن .

    File Transfer using Socket Application in C#‎‎ .NET 2.0

    Send File ( 2 GB! ) Using Socket

    Sending Files Using TCP

    راستی بهت توصیه می کنم ساختار لایه TCP رو حتما مطالعه کن .

  18. #18
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    مرسی
    چک میکنم ببینم چی میشه . خبر میدم

  19. #19
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    ایران - فارس
    پست
    150

    نقل قول: تبدیل یک فایل به آرایه ای از بایت ها ...

    فایده نداشت . کارم راه نسافتاد بازم همونطوره
    الان با اندازه فایل مشکل ندارم . فقط با اسم فایل مشکل دارم .
    از کلاینت اینو میفرستم :
    OpenFileDialog o = new OpenFileDialog();
    o.ShowDialog();
    byte[] fileBytes ;
    fileBytes = File.ReadAllBytes(o.FileName) ;
    string h = fileBytes.Length.ToString();
    byte[] gg = Encoding.UTF8.GetBytes(h + "~" + o.SafeFileName);
    sock.Send(gg, SocketFlags.None);
    Thread.Sleep(100);
    sock.Send(fileBytes, SocketFlags.None);


    بعد توی سرور اینطوری کار میکنم :
    این یه تابع رو نوشتم :
    public void recive(int size, string FileName)
    {
    int counter_file;
    byte[] buff_file = new byte[size];
    try
    {
    connection.Receive(buff_file, SocketFlags.None);
    File.WriteAllBytes(FileName, buff_file);
    for (counter_file = 0; counter_file < buff_file.Length; counter_file++)
    buff_file[counter_file] = Convert.ToByte(false);
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

    Thread.Sleep(1000);

    }

    بعدش این تایع روی گداشتم اوی یه Thread :
    public void WaitForConnect()
    {


    if (!conected)
    {
    TcpListener server = new TcpListener(ipAddress, port);
    Status = "Listening for Connections on " + hostName + "...\n";
    server.Start();
    connection = server.AcceptSocket();
    Status = "Client are now connected to the server";
    conected = true;
    }

    int counter;
    byte[] buff = new byte[100];
    while (true)
    {
    try
    {
    if (recive_file == false)
    {
    recive_file = true;
    connection.Receive(buff, SocketFlags.None);
    txt_beforeSplit = Encoding.UTF8.GetString(buff);
    Arr_After_Split = txt_beforeSplit.Split('~');
    size = int.Parse(Arr_After_Split[0]);
    name = Arr_After_Split[1];

    for (counter = 0; counter < buff.Length; counter++)
    buff[counter] = Convert.ToByte(false);

    }
    else
    {
    recive(size, full_path+name);
    recive_file = false;
    for (counter = 0; counter < buff.Length; counter++)
    buff[counter] = Convert.ToByte(false);
    }

    catch (Exception ex) { }
    Thread.Sleep(1000);
    }
    }



    اما ارور میده میگه مسیرت مشکل داره و دارای کارکتریه که نباید باشه . حالا اگه توی این
    recive(size, full_path+name);
    خط بنویسم : بجاش بنویسم :
                            recive(size, @"D:\a.pdf");
    درست میشه اما مساله اینجاس اونوقت دیگه نمیتونم اسم فایل و جتی پسوند فایل رو بفهمم که با همون پسوند و نام ذخیرش کنم . از FolderBrowser و ... هم استفاده کردم واسه ذخیره مسیر اما نشد !! به این صورت :
       private void button1_Click(object sender, EventArgs e)
    {
    if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
    {
    full_path = folderBrowserDialog1.SelectedPath ;
    label3.Text = full_path;
    }
    else
    {
    full_path = @"D:\";
    label3.Text = full_path ;
    }
    }

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

تاپیک های مشابه

  1. تبدیل رشته به آرایه ای از بایت
    نوشته شده توسط hossein-khoshseyar در بخش VB.NET
    پاسخ: 4
    آخرین پست: دوشنبه 17 آبان 1389, 22:20 عصر
  2. تبدیل آرایه ای از بایت به نوع داده single
    نوشته شده توسط eyes_shut_number1 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: یک شنبه 14 شهریور 1389, 20:53 عصر
  3. سوال: چگونگی تبدیل رشته به آرایه ای از بایت
    نوشته شده توسط saba_irani197 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 27 تیر 1389, 00:30 صبح
  4. سوال: تبدیل Object به آرایه ای از بایت
    نوشته شده توسط mshirdelcs در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 13 تیر 1389, 10:42 صبح
  5. سوال: تبدیل یک کلاس به آرایه بایت
    نوشته شده توسط shuriken در بخش C#‎‎
    پاسخ: 0
    آخرین پست: دوشنبه 30 شهریور 1388, 13:31 عصر

قوانین ایجاد تاپیک در تالار

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