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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.04.2011, 19:08
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию Проблема с TFileStream (не записывает)

Есть переменная типа Record с двумя полями типа string.
Поля заполняются Edit-ами. Если вводить с клавиатуры или копипастой
, то все норм, а если одно поле заполнить через OpenFileDialog.FileName
то FileStrim ничего не пишет. Исключений не возникает и при отладке поля заполняются нормально, но файл не создается.
Ответить с цитированием
  #2  
Старый 17.04.2011, 19:12
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

а вы код попробуйте для начала показать..., а то мы ещё как-то не телепаты, только учимся )
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #3  
Старый 17.04.2011, 19:39
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ключ fmCreate?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 17.04.2011, 22:12
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию Переписал код , но все то же

Код:
TMyRecord = record
MyFile: string[255];
...
end;
------------------
Edit1.text:=OpenDialog.FileName;
FR: TMyRecord;

AssignFile(FV,AFileName);
Rewrite(FV,1);
BlockWrite(FV,FILEHEADER, Length(FILEHEADER));
for I := 0 to FCount - 1 do
  begin
   FR.MyFile:=Edit1.Text;
   ...
   BlockWrite(FV, FR, SizeOf(FR));
  end;
CloseFile(FV);
Если коротко - то так.
OpenDialog создается динамически и освобождается.
Файл не пишется ни под каким соусом, только если в Edit1 набрат с клавиатуры.
Ответить с цитированием
  #5  
Старый 18.04.2011, 00:30
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию Нашел в чем глюк

Глюк в OpenDialog. Если выполнить метод Execute и открыть(выбрать)
файл , то труба дело ,записываться ничего не будет и надо перезапускать программу. А если файл не выбирать (Execute вернет False) то все работает.
Код:
OD:=TOpenDialog.Create(Self);
...
if OD.Execute then
  begin
   Edit1.Text:=OD.FileName;
   ...
  end;
OD.Free;
Где связь ?
Ответить с цитированием
  #6  
Старый 18.04.2011, 02:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от icsander
Глюк в OpenDialog.

Не, глюк в голове.
OpenDialog НЕ ПИШЕТ САМ НИЧЕГО. Он только позволяет выбрать имя файла. Да и OPEN предназначен для открытия файла, а для сохранения обычно используется SAVE (собственно, они одинаковые, но имеют ряд отличающихся настроек по умолчанию).

Код:
var
  dlg : TSaveDialog;
  F : File Of Integer;
begin
  dlg := TSaveDialog.Create(Self);
  If dlg.Execute Then
     Begin
        AssignFile(F,dlg.FileName);
        Rewrite(F);
        Write(F,1);
        CloseFile(F);
     End;
  dlg.Free;
end;
Ответить с цитированием
  #7  
Старый 18.04.2011, 12:23
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Не, глюк в голове.
OpenDialog НЕ ПИШЕТ САМ НИЧЕГО. Он только позволяет выбрать имя файла. Да и OPEN предназначен для открытия файла, а для сохранения обычно используется SAVE (собственно, они одинаковые, но имеют ряд отличающихся настроек по умолчанию).

Код:
var
  dlg : TSaveDialog;
  F : File Of Integer;
begin
  dlg := TSaveDialog.Create(Self);
  If dlg.Execute Then
     Begin
        AssignFile(F,dlg.FileName);
        Rewrite(F);
        Write(F,1);
        CloseFile(F);
     End;
  dlg.Free;
end;
Смотри пост ниже. OpenDialog присваивает значение Edit.Text, а запись в файл происходит в другом методе:
Код:
procedure SaveFile;
TMyRecord = record
MyFile: string[255];
...
end;
------------------
Edit1.text:=OpenDialog.FileName;
FR: TMyRecord;

AssignFile(FV,AFileName);
Rewrite(FV,1);
BlockWrite(FV,FILEHEADER, Length(FILEHEADER));
for I := 0 to FCount - 1 do
  begin
   FR.MyFile:=Edit1.Text;
   ...
   BlockWrite(FV, FR, SizeOf(FR));
  end;
CloseFile(FV);
Ответить с цитированием
  #8  
Старый 21.04.2011, 10:02
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию Решено

Если кому интересно: т.к. приложение в стадии разработки, то имя файла БД указывал просто как 'Bd.dat'. После выполнения OpenDialog1.Execute естественно изменялась текущая директория и БД не писалась, поэтому имя БД нужно записывать полностью с путями
('C:\Bd.dat')
Ответить с цитированием
  #9  
Старый 21.04.2011, 10:33
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Это вообще-то все знают и так. И еще, есть замечательная функция GetCurrentDirectory
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter