Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проблемы с сохранением типизированного файла


Автор: KOntra 24.5.2007, 15:56
{Я честно пытался найти решение своей проблемы в уже существовавших темах, но всё равно не понял...}

Проблемы с сохранением файла! Вроде всё сделал как надо, но файл не сохраняется! По выбранному пути его просто нет. Не пойму в чём дело.

Вот типы файла и динамического списка, который сохраняется в этот файл, если это нужно.
Код

Type 
  TpointerSp = ^TrecSp;  //тип "указатель" на запись
  TrecSp = record  //тип самой записи
    inf,key : smallint;
    next : TpointerSp
  end;
  TrecSpFile = record  //тип записи файла (типизированный файл)
    infF,keyF : smallint;
  end;
 


Процедура вызова TSaveDialog
Код

procedure TMainForm.save_in_file_spClick(Sender: TObject);
begin
  SaveDialog.InitialDir:=ExtractFilePath(Application.ExeName);
  SaveDialog.Filter :='files|*.kurs2';
  SaveDialog.FilterIndex:=1;
  if SaveDialog.execute then
     savelist(First,str(SaveDialog.Filename));  //процедура сохранения, str - это тип строки string[20]
  if FileExists(SaveDialog.Filename) then
    begin
        FileListBox.Items.Add(SaveDialog.Filename); // После сохранения вот это не происходит!
    end;
end;



Вот собственно процедура сохранения, в неё передаются указатель на первый элемент списка и имя файла.
Код

procedure savelist(var First:TpointerSp;FileName:str);
var f : file of TrecSpFile;
    zf : TrecSpFile;
    R : TpointerSp;
    k,d : integer;
begin
 assignfile(f,FileName);
 rewrite(f)
 R := First;
 repeat
   with R^,zf do
     begin
       keyF := key;
       infF := inf
     end;
   write(f,zf);
   R := R^.next;
 until R = First;
 closefile(f);
end;


 smile  Файла нет! Где ошибка?

Автор: Shaggy 24.5.2007, 18:18
а если так?
Код

savelist(First,SaveDialog.Filename);  
...
procedure savelist(var First:TpointerSp;FileName:string);

Автор: KOntra 24.5.2007, 18:33
Я же говорю, что
Код

type str=string[20];


Ошикба не в этом была, точней я так и не узнал в чём была ошибка, но проблема устранена. Если кто хочет из проффесионального интереса поискать в чём была проблема, то буду признателен. Самому интересно... Если, конечно, проблема была в этом коде.

Точно могу сказать, что в процедуре
Код

procedure savelist(var First:TpointerSp;FileName:str);

ошикби нет.

Зато вот как я изменил 
Код

procedure TMainForm.save_in_file_spClick(Sender: TObject);
var SearchRecCon: TSearchRec;
begin
   if SaveDialog.execute then
    begin
       SaveDialog.InitialDir:=ExtractFilePath(Application.ExeName);
       SaveDialog.Filter :='files|*.kurs2';
       SaveDialog.FilterIndex:=1;
       savelist(First,str(SaveDialog.Filename));    
       if FileListBox.Items.Strings[0]='<пусто>' then
                FileListBox.Items.Clear;
       FileListBox.Items.Add(ExtractFileName(SaveDialog.Filename))         
    end
end;


Хоть здесь я не делаю проверки FileExists, но зато в директории файл есть!))

Всем спасибо.

Добавлено через 10 минут и 42 секунды
Цитата(Shaggy @  24.5.2007,  18:18 Найти цитируемый пост)
а если так?


Код

savelist(First,SaveDialog.Filename);  
...
procedure savelist(var First:TpointerSp;FileName:string);


Кажется понял, в вашем варианте, заработала бы, ибо раньше у меня 

Код

type str=string[20]


, а теперь

Код

type str=string[100]


Скорей всего в первом случае в str не помещался полный путь поиска файла.

Ещё раз спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)