Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2021, 18:41   #101
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Или смотреть максимально возможный адрес (длина файла + смещение) и выбирать тип. Или упростить себе жизнь и сразу выдавать только в формате s37.
Сегодня экспериментальным путём ,(было не легко признаться) удалось выяснить с каким максимальным размером файла, работает определённый тип записи.
Получилось следующие (может кому пригодится) а то в википедии не всё описано.

формат s19 идёт строго от 0 до 65536 байт .

формат s28 идёт от 65537 до 16777216 байт .

формат s37 идёт от 16777217 байт и до ...... (просто гигантские размеры файлов должны быть) трудно представить где такие могут быть...
Зато стало ясно окончательно, почему так популярны s1, s2 (самые ходовые получаются ) особенно s2. И такой редкий s37.

Последний раз редактировалось sergey.serg-72; 27.03.2021 в 18:46.
sergey.serg-72 вне форума Ответить с цитированием
Старый 27.03.2021, 22:54   #102
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от sergey.serg-72
Так что и это не гарантия.
Это гарантия от случайной порчи, а не целенаправленных изменений.
Цитата:
Сообщение от sergey.serg-72
спросит почему s37 ?, такой редкий и не популярный , выбрал ?
Всё зависит от задания. Если нужно просто реализовать Bin -> Srec, то s37 вполне удовлетворяет. Но если есть какие-то еще критерии: нужен распространенный формат, или чтобы принимался определенными программами (программаторами, конвертерами), или обосновать выбор типов записей - то это другое дело.
Цитата:
Сообщение от sergey.serg-72
Просто привычней : if fbin.Size > .....? then
Я был не совсем прав. Так можно проверять размер файла, если перейти на использование TFileStream вместо TMemoryStream. С такими исправлениями программа спокойно преобразовала avi файл 1,39 ГБ (1 502 787 584 байт) в hex файл 3,93 ГБ (4 226 979 920 байт) за 1320 секунд (22 минуты). Notepad++ даже отказался открывать получившийся hex - слишком большой размер. Содержимое не проверил на правильность, но размер похож на верный. Скорость преобразования уперлась, на мой взгляд, в процессор - одно ядро было занято на 100%, а запись была всего лишь 3 мегабайта в секунду.
Цитата:
Сообщение от sergey.serg-72
с каким максимальным размером файла, работает определённый тип записи.
Не совсем согласен с размерами. Эти размеры верны, если s19 используется для 16битного микроконтроллера, а s28 - для 24битного. Но, например, если сохранять в формат s19 для 24битного, то можно взять начальное смещение $F, файл размера 65772 байт и использовать записи с количеством полезных данных 252. Тогда у последней записи S1 будет адрес $FFFF, а конец файла фактически будет иметь адрес больше $FFFF. В примере мог ошибиться с точными числами. К сожалению, в описании нигде не нашел, действительно ли хвост может вылезать, или это запрещено. Для простоты можно запретить это.
Цитата:
Сообщение от sergey.serg-72
просто гигантские размеры файлов должны быть
Необязательно файл должен быть большим. Размер может быть маленьким, но адреса, куда отображена флеш-память, большие.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 28.03.2021, 01:54   #103
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Это гарантия от случайной порчи, а не целенаправленных изменений.
Бывали случаи, как объяснил знающий ,с соседнего потока (я в этом 0) что данные искажались так, что совпадала контролка, например байты переворачивались в процессе записи...
Как он объяснил что 100% гарантии нет , но побайтное сравнение с буфером , либо в процессе записи, либо после , самый верный способ. На этом все современные прогеры стоят сейчас.

Цитата:
Сообщение от BDA Посмотреть сообщение
Необязательно файл должен быть большим. Размер может быть маленьким, но адреса, куда отображена флеш-память, большие.
Вот этого не знал, я с микроконтроллерами пока на Вы, только вот в процессе этого srec стал сталкиваться, говорят это целая наука.

Цитата:
Сообщение от BDA Посмотреть сообщение
Не совсем согласен с размерами. Эти размеры верны, если s19 используется для 16битного микроконтроллера, а s28 - для 24битного. Но, например, если сохранять в формат s19 для 24битного, то можно взять начальное смещение $F, файл размера 65772 байт и использовать записи с количеством полезных данных 252. Тогда у последней записи S1 будет адрес $FFFF, а конец файла фактически будет иметь адрес больше $FFFF. В примере мог ошибиться с точными числами. К сожалению, в описании нигде не нашел, действительно ли хвост может вылезать, или это запрещено. Для простоты можно запретить это.
Вполне может быть, а почему бы и нет ? В описании нет действительно некоторых, важных моментов.Я его уже перечитал раз 50, в разных вариантах. А пересчитывать по байтно пришлось, чтоб понять на каком размере переключается на другую запись.
Зато теперь знаем то, чего нет в википедии.

Цитата:
Сообщение от BDA Посмотреть сообщение
Я был не совсем прав. Так можно проверять размер файла, если перейти на использование TFileStream вместо TMemoryStream. С такими исправлениями программа спокойно преобразовала avi файл 1,39 ГБ (1 502 787 584 байт) в hex файл 3,93 ГБ (4 226 979 920 байт) за 1320 секунд (22 минуты). Notepad++ даже отказался открывать получившийся hex - слишком большой размер. Содержимое не проверил на правильность, но размер похож на верный. Скорость преобразования уперлась, на мой взгляд, в процессор - одно ядро было занято на 100%, а запись была всего лишь 3 мегабайта в секунду.
Можно исправить на так :

fbin: TFileStream;
ftxt: TMemoryStream;

fbin := tfilestream.Create(dlgOpen1 .FileName,fmopenReadWrite or fmShareDenyNone);
ftxt := TMemoryStream.Create;
if fbin.Size + offset > High(LongWord) then....

А можно наверное просто , ни чего не менять, а просто ещё одну переменную добавить, чисто для проверки на размер , так можно ?

var
f: TFileStream;
fbin: TMemoryStream;
ftxt: TMemoryStream;


if F.Size > .....? then
begin
ShowMessage('Недопустимый размер файла, строго до ..... байт !');
fbin.Free;
exit;
end
else
begin

Цитата:
Сообщение от BDA Посмотреть сообщение
Всё зависит от задания. Если нужно просто реализовать Bin -> Srec, то s37 вполне удовлетворяет. Но если есть какие-то еще критерии: нужен распространенный формат, или чтобы принимался определенными программами (программаторами, конвертерами), или обосновать выбор типов записей - то это другое дело.
Нет, критериев к счастью он не задавал просто srec .
Это я , в процессе изучения этого srec по разным ресурсам, к такому выводу пришёл.
Вот и подумал , для чего s37 конкретно идёт? , а так и не нашёл ни чего.
Но я с Вами согласен , если есть возможность переделки с минимальными усилиями то надо это и реализовать. По крайней мереи это лучше, чем ничего и не зачёт совсем.
В конце, концов такой hexполучился отличный, что многие конвертеры позавидуют.
То что Джонс будет hex доволен, это к бабке не ходи...Жалко не мне выпал он.
Пусть будет s37, а с какого кода лучше переделывать , у нас варианта три набралось уже?
Может последний самый? а для проверки размера просто ещё в переменные добавить
f: TFileStream; и не заморачиваться ?

Последний раз редактировалось BDA; 30.03.2021 в 00:27.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 03:00   #104
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Лучше все-таки перейти на TFileStream и для ввода, и для вывода. Тогда можно обрабатывать 4гигабайтовые файлы и никак не ограничивать пользователя. А еще версия с TFileStream работает в 2 раза быстрее, чем с TMemoryStream. Текущий вариант:
Код:
const
  Limit32 = $FFFFFFFF;
  Limit24 = $FFFFFF;
  Limit16 = $FFFF;
  Limit8 = $FF;

implementation

{$R *.dfm}

procedure TForm1.BeforeConvert(Sender: TObject; barMax: Integer);
begin
  Bin2Hex.Enabled := False;
  Bin2Srec.Enabled := False;
  ConvBar.Max := barMax;
end;

procedure TForm1.AfterConvert(Sender: TObject);
begin
  Bin2Hex.Enabled := True;
  Bin2Srec.Enabled := True;
  ConvBar.Position := 0;
end;

procedure TForm1.getOffset(var offset: Int64);
begin
  if Edit1.Text = '' then
  begin
    offset := 0;
    Exit;
  end;
  offset := StrToInt64Def('$' + Edit1.text, -1);
  if offset = -1 then
    raise Exception.Create('Введен некорректный адрес, с которого производить запись в файл!');
  if offset > Limit32 then
    raise Exception.Create('Слишком большой адрес!');
end;

procedure TForm1.Bin2HexClick(Sender: TObject);
const
  BYTES_IN_LINE = 16;
var
  fbin, ftxt: TFileStream;
  s, data_s: string;
  b: TBytes;
  offset: Int64;
  i, count, high_addr, cur_high_addr: integer;
  sum: byte;
  low_addr: word;
  start_conv, end_conv: TDateTime;
begin
  fbin := nil;
  ftxt := nil;
  try
    try
      getOffset(offset);
      if not dlgOpen1.Execute then
        exit;
      fbin := TFileStream.Create(dlgOpen1.FileName, fmOpenRead or fmShareDenyWrite);
      if fbin.Size > Limit32 then
        raise Exception.Create('Слишком большой файл!');
      if fbin.Size + offset > Limit32 then
        raise Exception.Create('Слишком большой адрес конца файла!');
      dlgSave1.Filter := 'Intel HEX File (*.hex)|*.hex';
      dlgSave1.FileName := ChangeFileExt(dlgOpen1.FileName, '.hex');
      if not dlgSave1.Execute then
        exit;
      ftxt := TFileStream.Create(dlgSave1.FileName, fmCreate or fmShareDenyWrite);
      start_conv := Now;
      BeforeConvert(Sender, fbin.Size div BYTES_IN_LINE);
      SetLength(b, BYTES_IN_LINE);
      high_addr := -1;
      while fbin.Position < fbin.Size do
      begin
        ConvBar.Position := ConvBar.Position + 1;
        Application.ProcessMessages;
        low_addr := fbin.Position + offset;
        cur_high_addr := (fbin.Position + offset) shr 16;
        if cur_high_addr <> high_addr then
        begin
          high_addr := cur_high_addr;
          sum := 6 + high_addr and $FF + high_addr shr 8;
          sum := -sum;
          s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]);
          ftxt.Write(s[1], Length(s));
        end;
        count := fbin.Read(b[0], BYTES_IN_LINE);
        sum := count + low_addr and $FF + low_addr shr 8;
        data_s := '';
        for i := 0 to count - 1 do
        begin
          data_s := data_s + IntToHex(b[i], 2);
          Inc(sum, b[i]);
        end;
        sum := -sum;
        s := Format(':%.2x%.4x00%s%.2x%s', [count, low_addr, data_s, sum, sLineBreak]);
        ftxt.Write(s[1], Length(s));
      end;
      s := ':00000001FF' + sLineBreak;
      ftxt.Write(s[1], Length(s));
      AfterConvert(Sender);
      end_conv := Now;
      s := Format('Файл успешно преобразован и записан за %d секунд(ы).', [SecondsBetween(start_conv, end_conv)]);
      Application.MessageBox(PAnsiChar(s), 'Converter', MB_Ok + MB_ICONINFORMATION);
    except
      on E : Exception do
        Application.MessageBox(PAnsiChar(E.Message), 'Converter', MB_Ok + MB_ICONERROR);
    end;
  finally
    fbin.Free;
    ftxt.Free;
  end;
end;
Но пока не проверял, что будет при "плохих" ситуациях (файл ввода или вывода кем-то захвачен в эксклюзивный доступ).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 28.03.2021 в 03:14.
BDA вне форума Ответить с цитированием
Старый 28.03.2021, 18:25   #105
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
procedure TForm1.Bin2HexClick(Sender: TObject);
const
BYTES_IN_LINE = 16;
var
fbin, ftxt: TFileStream;
s, data_s: string;
b: TBytes;
offset: Int64;
i, count, high_addr, cur_high_addr: integer;
sum: byte;
low_addr: word;
start_conv, end_conv: TDateTime;
begin
fbin := nil;
ftxt := nil;
try
try
getOffset(offset);
if not dlgOpen1.Execute then
exit;
fbin := TFileStream.Create(dlgOpen1.FileNam e, fmOpenRead or fmShareDenyWrite);
if fbin.Size > Limit32 then
raise Exception.Create('Слишком большой файл!');
if fbin.Size + offset > Limit32 then
raise Exception.Create('Слишком большой адрес конца файла!');
dlgSave1.Filter := 'Intel HEX File (*.hex)|*.hex';
dlgSave1.FileName := ChangeFileExt(dlgOpen1.FileName, '.hex');
if not dlgSave1.Execute then
exit;
ftxt := TFileStream.Create(dlgSave1.FileNam e, fmCreate or fmShareDenyWrite);
start_conv := Now;
BeforeConvert(Sender, fbin.Size div BYTES_IN_LINE);
SetLength(b, BYTES_IN_LINE);
high_addr := -1;
while fbin.Position < fbin.Size do
begin
ConvBar.Position := ConvBar.Position + 1;
Application.ProcessMessages;
low_addr := fbin.Position + offset;
cur_high_addr := (fbin.Position + offset) shr 16;
if cur_high_addr <> high_addr then
begin
high_addr := cur_high_addr;
sum := 6 + high_addr and $FF + high_addr shr 8;
sum := -sum;
s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]);
ftxt.Write(s[1], Length(s));
end;
count := fbin.Read(b[0], BYTES_IN_LINE);
sum := count + low_addr and $FF + low_addr shr 8;
data_s := '';
for i := 0 to count - 1 do
begin
data_s := data_s + IntToHex(b[i], 2);
Inc(sum, b[i]);
end;
sum := -sum;
s := Format(':%.2x%.4x00%s%.2x%s', [count, low_addr, data_s, sum, sLineBreak]);
ftxt.Write(s[1], Length(s));
end;
s := ':00000001FF' + sLineBreak;
ftxt.Write(s[1], Length(s));
AfterConvert(Sender);
end_conv := Now;
s := Format('Файл успешно преобразован и записан за %d секунд(ы).', [SecondsBetween(start_conv, end_conv)]);
Application.MessageBox(PAnsiChar(s) , 'Converter', MB_Ok + MB_ICONINFORMATION);
except
on E : Exception do
Application.MessageBox(PAnsiChar(E. Message), 'Converter', MB_Ok + MB_ICONERROR);
end;
finally
fbin.Free;
ftxt.Free;
end;
end;
С этим всё понятно, без вопросов, код для Hex, но уже на TFileStream;
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 18:29   #106
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
procedure TForm1.BeforeConvert(Sender: TObject; barMax: Integer);
begin
Bin2Hex.Enabled := False;
Bin2Srec.Enabled := False;
ConvBar.Max := barMax;
end;
Как вызывается эта процедура ? ( щёлкнуть по кнопки, по форме?).
Код у нас по Hex, а зачем тогда
Bin2Srec.Enabled := False; ?
Не понял как вызывается процедура, да и за чем ? разве в общем коде нельзя прописать ?

Цитата:
Сообщение от BDA Посмотреть сообщение
procedure TForm1.AfterConvert(Sender: TObject);
begin
Bin2Hex.Enabled := True;
Bin2Srec.Enabled := True;
ConvBar.Position := 0;
end;
Тоже не понятна процедура вызова и разве в общем коде не проще прописать ?

Цитата:
Сообщение от BDA Посмотреть сообщение
procedure TForm1.getOffset(var offset: Int64);
begin
if Edit1.Text = '' then
begin
offset := 0;
Exit;
end;
offset := StrToInt64Def('$' + Edit1.text, -1);
if offset = -1 then
raise Exception.Create('Введен некорректный адрес, с которого производить запись в файл!');
if offset > Limit32 then
raise Exception.Create('Слишком большой адрес!');
end;
Тоже не понятна как вызывается процедура и за чем ? можно же в коде общем?.

Три процедуры не понятны совсем и как вызываются и за чем , если эти моменты в общем коде можно прописать.

Последний раз редактировалось BDA; 30.03.2021 в 00:27.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 18:36   #107
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от sergey.serg-72
Как вызывается эта процедура ?
BeforeConvert и AfterConvert вызываются в Bin2HexClick.
Цитата:
Сообщение от sergey.serg-72
зачем тогда Bin2Srec.Enabled := False; ?
Потому что добавил на форму уже кнопку для srec.
Цитата:
Сообщение от sergey.serg-72
разве в общем коде нельзя прописать ?
Можно и в общем прописать. Просто код постепенно изменяется, чтобы поддерживать в одной программе преобразование в hex и в srec. Общая часть с отключением и включением кнопок была вынесена в BeforeConvert и AfterConvert.
Цитата:
Сообщение от sergey.serg-72
Тоже не понятна как вызывается процедура и за чем
Аналогично. Получение смещения одинаково для hex и srec. Чтобы не писать два раза один и тот же код, он был вынесен в отдельную процедуру.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 28.03.2021, 19:21   #108
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
BeforeConvert и AfterConvert вызываются в Bin2HexClick.
Это как ? ведь процедура Bin2HexClick. Это клик по кнопке SpeedButton просто кнопка переименована на Bin2HexClick. И вторая процедура BeforeConvert и AfterConver не прописываются, компилятор в ошибку уходит (ошибка идентификации), у меня не получаются эти процедуры.

Сделал так :

Код:
 procedure TForm1.Bin2HexClick(Sender: TObject);
const
BYTES_IN_LINE = 16;
var
fbin, ftxt: TFileStream;
s, data_s: string;
b: TBytes;
offset: Int64;
i, count, high_addr, cur_high_addr: integer;
sum: byte;
low_addr: word;
start_conv, end_conv: TDateTime;
begin
if Edit1.Text = '' then
offset := 0
else
begin
offset := StrToInt64Def('$' + Edit1.text, -1);
if offset = -1 then
begin
Application.MessageBox(
'Введен некорректный адрес, с которого производить запись в файл!',
'Converter',
MB_Ok + MB_ICONERROR);
exit;
end
else if offset > High(LongWord) then
begin
Application.MessageBox('Слишком большой адрес!', 'Converter', MB_Ok + MB_ICONERROR);
exit;
end;
end;
 dlgOpen1.Filter := ' (*.bin)|*.bin';
if not dlgOpen1.Execute then
exit;
fbin := TFileStream.Create(dlgOpen1.FileName, fmOpenRead or fmShareDenyWrite);
if fbin.Size > Limit32 then
raise Exception.Create('Слишком большой файл!');
if fbin.Size + offset > Limit32 then
raise Exception.Create('Слишком большой адрес конца файла!');
dlgSave1.Filter := 'Intel HEX File (*.hex)|*.hex';dlgSave1.FileName := ChangeFileExt(dlgOpen1.FileName, '.hex');
if not dlgSave1.Execute then
exit;
ftxt := TFileStream.Create(dlgSave1.FileName, fmCreate or fmShareDenyWrite);
start_conv := Now;
if fbin.Size + offset > High(LongWord) then
begin
Application.MessageBox('Слишком большой адрес!', 'Converter', MB_Ok + MB_ICONERROR);
fbin.Free;
ftxt.Free;
exit;
end;
Bin2Hex.Enabled := False;
ConvBar.Max := fbin.Size div BYTES_IN_LINE;
SetLength(b, BYTES_IN_LINE);
high_addr := -1;
while fbin.Position < fbin.Size do
begin
ConvBar.Visible:=true;
ConvBar.Position := ConvBar.Position + 1;
Application.ProcessMessages;
low_addr := fbin.Position + offset;
cur_high_addr := (fbin.Position + offset) div $10000;
if cur_high_addr <> high_addr then
begin
high_addr := cur_high_addr;
 sum := 6 + high_addr mod $100 + high_addr div $100;
 sum := -sum;
  s := Format(':02000004%.4x%.2x%s', [high_addr, sum, sLineBreak]);
 ftxt.Write(s[1], Length(s));
 end;
 count := fbin.Read(b[0], BYTES_IN_LINE);
 sum := count + low_addr mod $100 + low_addr div $100;
 data_s := '';
 for i := 0 to count - 1 do
  begin
 data_s := data_s + IntToHex(b[i], 2);
Inc(sum, b[i]);
end;
sum := -sum;
s := Format(':%.2x%.4x00%s%.2x%s', [count, low_addr, data_s, sum, sLineBreak]);
ftxt.Write(s[1], Length(s));
end;
s := ':00000001FF' + sLineBreak;
ftxt.Write(s[1], Length(s));

fbin.Free;
ftxt.Free;
Bin2Hex.Enabled := True;
ConvBar.Position := 0;
end_conv := Now;
ConvBar.Visible:=False;
s := Format('Файл успешно преобразован и записан за %d секунд(ы).', [SecondsBetween(start_conv, end_conv)]);
Application.MessageBox(PAnsiChar(s), 'Converter', MB_Ok + MB_ICONINFORMATION);
end;
По скорости не заметил что быстрей в двое , на несколько секунд быстрей.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 19:30   #109
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Потому что добавил на форму уже кнопку для srec.
Так это получится в одной программе и hex и srec ?
Мне всё ровно hex убирать придётся , моя та тема будет по srec , это значит форма и одна кнопка для srec. Я же не могу сразу и то и это сдать, Джонса Кондратий схватит тут же.....
Это палево сразу...

Последний раз редактировалось sergey.serg-72; 28.03.2021 в 19:37.
sergey.serg-72 вне форума Ответить с цитированием
Старый 28.03.2021, 19:45   #110
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от sergey.serg-72
у меня не получаются эти процедуры.
Нужно еще в класс формы (в самом начале юнита) вписать:
Код:
    procedure BeforeConvert(Sender: TObject; barMax: Integer);
    procedure AfterConvert(Sender: TObject);
    procedure getOffset(var offset: Int64);
Цитата:
Сообщение от sergey.serg-72
По скорости не заметил что быстрей в двое
Например, bin файл в 7.7МБ с использованием Memory преобразовывался у меня 14 секунд, а с использованием File - 7 секунд.
Цитата:
Сообщение от sergey.serg-72
Мне всё ровно hex убирать придётся
Это да. Но мне лень хранить кучу версий, поэтому актуальной будет только версия с 2 кнопками (хотя, возможно, кнопка в итоге будет одна).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно создать "батник", вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Помощь студентам 2 03.09.2013 16:03
Удаление первых n-строк из txt-файла Neksion Помощь студентам 2 10.07.2013 18:12
Создать чтение из файла и запись в файл txt на С++ skifre Фриланс 0 01.06.2012 16:16
поиск и выципление строк из txt файла D_e_n_n Помощь студентам 7 04.02.2011 05:39
C# Представление txt файла как массива строк asheb Помощь студентам 7 20.04.2010 12:51