Всем доброго времени суток. Помогите разобраться, написал приложение которое производит дозапись бинарного файла, но дозапись только в 101 значение, в чем может быть проблема ?
public void Cicle()
{
SectionHelper helper = new SectionHelper();
var Number_s = helper.AllocatedSection(8);
var Year_s = helper.AllocatedSection(8);
var Shift_s = helper.AllocatedSection(3);
var Day_s = helper.AllocatedSection(5);
var Month_s = helper.AllocatedSection(4);
var R_s = helper.AllocatedSection(4); // пока не понял что за параметр.
Int32 Line = 0;
Int32 Line2 = 0;
int Year2 = 0;
int Day2 = 0;
int Month2 = 0;
int Shift2 = 0;
int Rs2 = 0;
int Number2 = 0;
int NumberR = -1;
string path = @"E:\DELETE\n.dat";
string path2 = @"E:\DELETE\nr.dat";
try
{
using (BinaryReader reader = new BinaryReader(
File.Open(
path,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite)))
{
using (BinaryReader reader2 = new BinaryReader(
File.Open(
path2,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite)))
{
while (reader.PeekChar() > -1)
{
Nr++;
Line = reader.ReadInt32();
BitVector32 bv = new BitVector32(Line);
int Number = bv[Number_s];
int Year = bv[Year_s];
int Shift = bv[Shift_s];
int Day = bv[Day_s];
int Month = bv[Month_s];
int Rs = bv[R_s];
if (reader2.PeekChar() > -1)
{
Line2 = reader2.ReadInt32();
BitVector32 bv2 = new BitVector32(Line2);
Number2 = bv2[nr_s];
Year2 = bv2[y_s];
Shift2 = bv2[sm_s];
Day2 = bv2[d_s];
Month2 = bv2[m_s];
Rs2 = bv2[r_s];
}
Console.WriteLine("Начальный параметр Line {0}", Line);
if ((Line != Line2) & (Year > 14))
{
using (BinaryWriter WriteNr = new BinaryWriter(
File.Open(
path2,
FileMode.Append,
FileAccess.Write,
FileShare.ReadWrite)
))
{
WriteNr.Write(Line);
//WriteNr.Close();
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Запись в Nr Line:{0} И Line2:{1}", Line, Line2);
Console.ResetColor();
}
ReadSr _readSr = new ReadSr(
Line2,
Year2,
Day2,
Month2,
Shift2,
Nr2);
if ((_readSr.NumberZ == NumberR) & (_readSr.flag))
{
}
else
{
ReadSr _readSr2 = new ReadSr(
Line,
Year,
Day,
Month,
Shift,
Nr);
{
if (_readSr2.flag)
{
SaveBinaryNumb save = new SaveBinaryNumb(
_readSr2.NumberZ,
_readSr2.TimeRelease,
_readSr2.NumberRoll);
}
}
}
}
}
Причем самое интересное файл в размерности растет, и продолжает расти пока не закроешь программу, а так увы не должно быть, потому как идет сравнение данных с одного файла с другим фалом, и если совпадения то пропускать выполнение каких либо действий. Помогите пожалуйста
Разделяй и властвуй древнейший принцип, который годится и для программирования. Я набросал примерный способ решения вашей задачи с комментариями пожеланиями и пояснениями. Он естественно никак не проверялся на ошибки, считайте это просто Набросок того что должно быть. Раскрашивать и дорисовывать это уже ваша задача.
//методы принято называть с английскими глаголами вначале: Get,Set,Make,Load и т.д.
public void MakeCycle()
{
//пути к файлам, адреса сайтов и проч. нужно делать
//приватными константными полями класса
//или параметрами метода,
//но не локальными переменными метода
string pathN = @"E:\DELETE\n.dat";
string pathNr = @"E:\DELETE\nr.dat";
//первый список
List<ReadSr> listReadSr1 = GetListReadSr(pathN, new SectionHelper());
//проверяем, если получили пустой список, то прерываемся на этом
if (!listReadSr1.Any()) return;
//второй список
List<ReadSr> listReadSr2 = GetListReadSr(pathNr, new SectionHelper());
//проверяем, если получили пустой список, то прерываемся на этом
if (!listReadSr2.Any()) return;
//теперь займемся сравнением и записью
int count = CompareAndWriteReadSrLists(listReadSr1, listReadSr2, pathNr);
}
private List<ReadSr> GetListReadSr(string pathFile, SectionHelper helper)
{
//локальные переменные именуются со строчной буквы (чтобы отличать их от свойств и классов)
var lengthNumber = helper.AllocatedSection(8);
var lengthYear = helper.AllocatedSection(8);
var lengthShift = helper.AllocatedSection(3);
var lengthDay = helper.AllocatedSection(5);
var lengthMonth = helper.AllocatedSection(4);
var lengthRs = helper.AllocatedSection(4);
//готовимся
List<ReadSr> result = new List<ReadSr>();
ReadSr readSr = null;
//читаем файл и создаем список объектов типа ReadSr
try
{
using (BinaryReader reader = new BinaryReader(
File.Open(
pathFile,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite)))
{
Int32 line = 0;
BitVector32 bVector = null;
while (reader.PeekChar() > -1)
{
line = reader.ReadInt32();
bVector = new BitVector32(line);
//создаем новый экземпляр ReadSr
//(я не знаю как в этом классе называются свойства, поэтому отсебятина )
readSr = new ReadSr()
{
Number = bVector[lengthNumber],
Year = bVector[lengthYear],
Shift = bVector[lengthShift],
Day = bVector[lengthDay],
Month = bVector[lengthDay],
Rs = bVector[lengthRs]
};
//добавляем в список новый экземпляр
result.Add(readSr);
}
}
}
catch(Exception)
{
Debug.WriteLine("Ошибка чтения файла в методе GetReadSr()");
return new List<ReadSr>(); //ошибка, тогда пустой список
}
return result;
}
private int CompareAndWriteReadSrLists(List<ReadSr> sourceList, List<ReadSr> targetList, string pathFile)
{
//счетчик записанных элементов, который будем возвращать
int result = 0;
try
{
using (BinaryWriter writer = new BinaryWriter(
File.Open(
pathFile,
FileMode.Append,
FileAccess.Write,
FileShare.ReadWrite)))
{
for (int i = 0; i < sourceList.Count; i++)
{
//если экземпляры не равны и у источника год > 14
if (!ReadSrPropertiesCompare(sourceList[i], targetList[i])
&& (sourceList[i].Year > 14))
{
//пишем в файл
writer.Write(sourceList[i]);
//счетчик записанных элементов
result++;
}
}
}
}
catch()
{
Debug.WriteLine("Ошибка записи в файл в методе CompareAndWriteReadSrLists()");
}
//
return result;
}
private bool ReadSrPropertiesCompare(List<ReadSr> sourceElement, List<ReadSr> targetElement)
{
//здесь сравниваем все свойства у двух экземпляров
//и если все свойства равны, то возвращаем true
//а еще лучше в классе сделать override метода Equals()
//и тогда этот метод бы не понадобился
//а можно было бы сравнивать sourceElement.Equls(targetElement)
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем приветНачал писать игру и пришел момент когда надо перемещаться персонажем
Есть пустой DataGridViewкоторый привязан к источнику данных, и настроен на отображения двух столбцов Id и Name