![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() В общем, проблема такая: перепробовал все способы открыть файлы - через tfilestream, textfile,file(ну я не знаю как объяснить лучше, просто это все типы указателей на файл которые перепробовал), везде вылетает сразу после открытия файла с access violation.
открытие идет через topendialog, я пробовал руками вбивать путь, все равно летит... вот код: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DialogsX, StdCtrls, StrUtils, Buttons, Mask; type TForm1 = class(TForm) flpndlg1: TFileOpenDialog; btn1: TButton; edt1: TEdit; lbl1: TLabel; medt1: TMaskEdit; btn2: TBitBtn; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private public function encode(instring:string; StartKey, MultKey, AddKey: Integer):AnsiString; procedure open_to_encode; end; const StartKey = 248; MultKey = 62142; var Form1: TForm1; encoded:AnsiString; input:TFileStream; line:string; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin open_to_encode; end; function TForm1.encode(InString: string; StartKey, MultKey, AddKey: Integer):AnsiString; var i: cardinal; begin Result := 'correct'; for i := 1 to Length(InString) do begin Result := Result + CHAR(Byte(InString[i]) xor (StartKey shr 8)); StartKey := (Byte(Result[i]) + StartKey) * MultKey + AddKey; end; end; procedure TForm1.open_to_encode; begin if Form1.flpndlg1.Execute then begin input.Create(form1.flpndlg1.FileName, fmOpenWrite, fmShareDenyWrite); input.Read(line, input.Seek(0,soFromEnd)); end; end; procedure TForm1.btn2Click(Sender: TObject); begin if Length (form1.medt1.Text) = 6 then begin encoded := encode(line, StartKey, MultKey, StrToInt(form1.medt1.Text)); Form1.edt1.Text:=encoded; //input.Write(encoded,Length(encoded)); //input.Free; end; end; end. Помогите, пожалуйста. я уже не знаю, что можно сделать. |
#2
|
||||
|
||||
![]() windows 7 тут ни при чем:
Код:
procedure TForm1.open_to_encode; begin if Form1.flpndlg1.Execute then begin //input.Create(form1.flpndlg1.FileName, fmOpenWrite, fmShareDenyWrite); input:=TFileStream.Create(form1.OpenDialog1.FileName, fmOpenWrite, fmShareDenyWrite); |
#3
|
|||
|
|||
![]() спасибо огромное, я просто не очень хорошо ориентируюсь по коду, проглядел или сам ступил... и еще один вопрос вдогонку, сейчас столкнулся с еще одной проблемой в этом же коде:
line: string; ... leng:=input.Seek(0,soFromEnd); input.Read(line, leng); во время отладки сталкиваюсь с проблемой - в line ничего не вносится, в watch list ее значение остается пустым. если не трудно - подскажите, что я делаю не так? (: и, может, есть способ внести в одну строку содержимое всего файла разом, без промежуточных команд? |
#4
|
||||
|
||||
![]() чтение из TFileStream в String :
Код:
procedure TForm1.FormCreate(Sender: TObject); var filestream: TFileStream; s: String; begin filestream:=TFileStream.Create('c:\Downloads\bp.txt', fmOpenRead); SetLength(s, filestream.Size); Caption:=IntToStr(filestream.Read(PChar(s)^, Length(s))); filestream.Free; Memo1.Text:=s; end; Код:
filestream.Read(s[1], Length(s)) Последний раз редактировалось NumLock, 30.05.2010 в 11:47. |