Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.05.2010, 14:21
jabher jabher вне форума
Прохожий
 
Регистрация: 29.05.2010
Сообщения: 2
Репутация: 10
По умолчанию не работает открытие файлов в windows 7 (delphi 7)

В общем, проблема такая: перепробовал все способы открыть файлы - через 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  
Старый 29.05.2010, 14:51
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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  
Старый 29.05.2010, 15:44
jabher jabher вне форума
Прохожий
 
Регистрация: 29.05.2010
Сообщения: 2
Репутация: 10
По умолчанию

спасибо огромное, я просто не очень хорошо ориентируюсь по коду, проглядел или сам ступил... и еще один вопрос вдогонку, сейчас столкнулся с еще одной проблемой в этом же коде:
line: string;
...
leng:=input.Seek(0,soFromEnd);
input.Read(line, leng);

во время отладки сталкиваюсь с проблемой - в line ничего не вносится, в watch list ее значение остается пустым.
если не трудно - подскажите, что я делаю не так? (:
и, может, есть способ внести в одну строку содержимое всего файла разом, без промежуточных команд?
Ответить с цитированием
  #4  
Старый 30.05.2010, 11:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

чтение из 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.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025