|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с TFileStream (не записывает)
Есть переменная типа Record с двумя полями типа string.
Поля заполняются Edit-ами. Если вводить с клавиатуры или копипастой , то все норм, а если одно поле заполнить через OpenFileDialog.FileName то FileStrim ничего не пишет. Исключений не возникает и при отладке поля заполняются нормально, но файл не создается. |
#2
|
|||
|
|||
а вы код попробуйте для начала показать..., а то мы ещё как-то не телепаты, только учимся )
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#3
|
||||
|
||||
Ключ fmCreate?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
|||
|
|||
Переписал код , но все то же
Код:
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
|
|||
|
|||
Нашел в чем глюк
Глюк в OpenDialog. Если выполнить метод Execute и открыть(выбрать)
файл , то труба дело ,записываться ничего не будет и надо перезапускать программу. А если файл не выбирать (Execute вернет False) то все работает. Код:
OD:=TOpenDialog.Create(Self); ... if OD.Execute then begin Edit1.Text:=OD.FileName; ... end; OD.Free; |
#6
|
|||
|
|||
Цитата:
Не, глюк в голове. 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
|
|||
|
|||
Цитата:
Код:
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
|
|||
|
|||
Решено
Если кому интересно: т.к. приложение в стадии разработки, то имя файла БД указывал просто как 'Bd.dat'. После выполнения OpenDialog1.Execute естественно изменялась текущая директория и БД не писалась, поэтому имя БД нужно записывать полностью с путями
('C:\Bd.dat') |
#9
|
||||
|
||||
Это вообще-то все знают и так. И еще, есть замечательная функция GetCurrentDirectory
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |