PDA

View Full Version : سوال: خواندن فایل باینری



sevenboys
دوشنبه 18 دی 1391, 14:02 عصر
یک فایل باینری به اندازه 1000000 بیت دارم که روی هارد ذخیره شده است چگونه میتوانم با استفاده از readbinery بیت های که مضربی از سه هستند را بخوانم و داخل یک ارایه ذخیره کنم؟

مهرداد صفا
دوشنبه 18 دی 1391, 14:21 عصر
سلام
میتوانید با استفاده از متود File.ReadAllBytes تمام بایتهای یک فایل را خوانده و از میان آنها بایتهایی را که بر سه بخش پذیرند را در یک آرایه بریزید. به این صورت:

byte[] bytes = (from BYTE in System.IO.File.ReadAllBytes(FileName) where (BYTE % 3 == 0) select BYTE).ToArray();

sevenboys
دوشنبه 18 دی 1391, 15:34 عصر
using (BinaryReader b = new BinaryReader(File.Open(strFileName, FileMode.Open)))
{
int pos = 0;

int length = (int)b.BaseStream.Length;
double[] data = new double[length];
int[] data1 = new int[length];
int idx = 0;

while (pos < length)
{
data[idx] = b.ReadDouble();
data1[idx] = idx;
idx++;
pos += sizeof(double);

}
axTChart1.Series(0).AddArray(length / sizeof(double), data, data1);
حجم فایل من زیاد است و نمیتوانم همه ان را ابتدا خوانده و برای همین کار میخواهم یه نقاطی از ان را به عنوان نمونه انتخاب کرده و انها را بخوانم که این نقاط را به عنوان مثال مضربی از 3 در نظر گرفتم،من در اصل دارم از تابع بالا استفاده میکنم و باید در این خط data[idx] = b.ReadDouble(); دستوری بنویسم که به جای خواندن به اندازه دابل ان مضرب را هم که انتخاب کردم در دابل ضرب کند و به اندازه ان در فایل جلو رود و از انجا به اندازه دابل بخواند اما دستورشا نمیدونم که چطوری باید بنویسم

the king
سه شنبه 19 دی 1391, 02:46 صبح
یک فایل باینری به اندازه 1000000 بیت دارم که روی هارد ذخیره شده است چگونه میتوانم با استفاده از readbinery بیت های که مضربی از سه هستند را بخوانم و داخل یک ارایه ذخیره کنم؟


struct DataIndex
{
public double Data;
public int Index;

public DataIndex(double data, int index)
{
this.Data = data;
this.Index = index;
}
}



string strFileName = "c:\\yourfile.dat";
int step = 3; // bytes
int count;
DataIndex[] data;
using (FileStream f = new FileStream(strFileName, FileMode.Open))
{
count = (int)f.Length / (sizeof(double) + step);
data = new DataIndex[count];
using (BinaryReader b = new BinaryReader(f))
{
for (int i = 0; i < count; i++)
{
int index = (int)f.Position;
data[i] = new DataIndex(b.ReadDouble(), index);
f.Seek(step, SeekOrigin.Current);
}
}
}

sevenboys
یک شنبه 24 دی 1391, 10:36 صبح
struct DataIndex
{
public double Data;
public int Index;

public DataIndex(double data, int index)
{
this.Data = data;
this.Index = index;
}
}



string strFileName = "c:\\yourfile.dat";
int step = 3; // bytes
int count;
DataIndex[] data;
using (FileStream f = new FileStream(strFileName, FileMode.Open))
{
count = (int)f.Length / (sizeof(double) + step);
data = new DataIndex[count];
using (BinaryReader b = new BinaryReader(f))
{
for (int i = 0; i < count; i++)
{
int index = (int)f.Position;
data[i] = new DataIndex(b.ReadDouble(), index);
f.Seek(step, SeekOrigin.Current);
}
}
}
قسمت struct را باید در کجا بنویسم؟؟؟