PDA

View Full Version : خواندن قسمتی از فایل



milad.bm
شنبه 15 فروردین 1394, 16:39 عصر
سلام به همگی
میخوالستم بدونم راهی هست که تو سی شارپ بتونم قسمتی از یک فایل رو بیارم تو رم؟
مثلا بگم از بایت یک تا بایت 1024 بیاد تو رم؟

am_al_59
شنبه 15 فروردین 1394, 16:41 عصر
FileStream fs = File.Open("filename", FileMode.Open);
byte[] b = new byte[100];
fs.Read(b, 0, 100);


از اول فایل 100 بایت میخونه میریزه تو آرایه

milad.bm
شنبه 15 فروردین 1394, 17:32 عصر
با تشکر
من یه نمونه رو اینجوری نوشتم که متاسفانه ارور میده
string FilePath = (@"C:\Users\Tiny8.1\Desktop\raw.cr2");
//data = Encoding.UTF8.GetBytes(data);
FileStream fs = File.Open(FilePath, FileMode.Open);
byte[] b = new byte[1];
fs.Read(b, 16982738, 16982739);
MessageBox.Show(Convert.ToString(b[0]));

تو قسمت fs.read خطا میگیره مثلا اگه بین 1 تا 3 انتخابش کنم و آرایه هم دو تایی باشه خطا میده

am_al_59
شنبه 15 فروردین 1394, 17:35 عصر
توی خط

fs.Read(b, 16982738, 16982739);

شما گفتی از موقعیت بایت 16982738 به تعداد 16982739 بایت بخون؟!!!!
اگرمیخوای فقط یک بایت بخونی این میشه




fs.Read(b, 16982738, 1);

milad.bm
شنبه 15 فروردین 1394, 23:42 عصر
مرسی از کمکت. من تقبلا PHP کار کردم خیلی با سی شارپ آشنا نیستم.
اما یه چیزی که هست. الان وقتی پارامتر دوم صفر باشه درست کار میکنه اما وقتی پارامتر دوم عوض بشه مثلا 2 بشه و بگم از بایت 2 به بعد 1024 تارو بخون خطا میده.
دستور زیر رو اجرا میکنم باز خطا میده.

byte[] b = new byte[1024];
fs.Read(b, 2, 1024);

am_al_59
شنبه 15 فروردین 1394, 23:49 عصر
خطاطو بزار به همراه دستوراتی که مربوط به بازکردن و بستن فایلت هست

milad.bm
شنبه 15 فروردین 1394, 23:59 عصر
private void Form1_Load(object sender, EventArgs e)
{
string FilePath = (@"C:\Users\Tiny8.1\Desktop\raw.cr2");
//data = Encoding.UTF8.GetBytes(data);
FileStream fs = File.Open(FilePath, FileMode.Open);
byte[] b = new byte[1024];
fs.Read(b, 2, 1024);
MessageBox.Show(Convert.ToString(b[1]));
//File.WriteAllBytes(@"C:\Users\Tiny8.1\Desktop\1.txt", data);
}


{"Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection."}

am_al_59
یک شنبه 16 فروردین 1394, 00:07 صبح
اشتباه از کد منه اول با دستور Seek نشانگرو ببر جلو


fs.Seek(2, SeekOrigin.Begin);
byte[] b = new byte[1024];
fs.Read(b, 0, 1024);


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

milad.bm
یک شنبه 16 فروردین 1394, 00:23 صبح
واقعا مرسی از جواباتون
درست شد.