Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Творится какая-то странная хренотень с записью строки в поток. [D5, WinXP]


Страницы:   1 2 3

romeo ©   (2004-06-30 16:37:00) 

Вкратце такие дела: есть TEdit (содержит путь к файлу), по нажатию кнопки его ".Text" записывается в переменную S: String, которая затем записывается в TMemoryStream, а оттуда все переписывается в файл и прога закрывается. При очередном открытии проги делаем обратную операцию и получаем считанное из файла значение переменной в наш TEdit. До тех пор как значение в TEdit заносится ручками (или копируется из текстового редактора и т.п.) все фунциклирует замечательно в обе стороны.

НО!!!!!!!

Стоит только попытаться упростить себе жисть следующим способом:

if OPenDialog1.Execute
then edPath.Text := ExtractFilePath(OPenDialog1.FileName);


и попытать проделать уже описаную выше процедуру, то начинается та самая хренотень. А именно: программа завершается как надо, без каких либо ошибок, но при повторном открытии из файла считывается старое значение (как показало вскрытие - вообще не происходит записи в файл), хотя даже при пошаговом выполнении все переменные в этом куске


{I - Integer, MS - TMemoryStream, S - String}
begin
   I := Length(S);
   MS.Write(I, SizeOf(Integer));
   Write(S[1], I);
end;


имеют правильные значения.
Если набирать тот же путь к файлу ручками - все фунциклирует.
Что за полтергейст и как с ним бороться?


lamer   (2004-06-30 17:51:00) [41]

MS.WriteBuffer(I, SizeOf(Integer));
SizeOf(Integer)-это что за integer?


Digitman   (2004-06-30 17:30:00) [42]

меня твой TEdit совершенно не парит
мой пример - 100%-но работающий
думай головой, как его присобачить к своему TEdit


romeo   (2004-06-30 17:15:00) [43]

Есть одно "но":

var i: Integer
  s: string;
..
s := 'Что-то там';
..

showmessage('Перед записью : ' + s);
MS.WriteBuffer(I, SizeOf(Integer));
MS.WriteBuffer(S[1], I);

..
  MS.SaveToFile('MyFile.ext');
 MS.Free;
..
 MS := TMemoryStream.Create;
 MS.LoadFromFile('MyFile.ext');


..
MS.Position := 0;
..

MS.ReadBuffer(I, SizeOf(Integer));
SetLength(S, I);
MS.ReadBuffer(S[1], I);
showmessage('После чтения : ' + s);

Я же ведь говорю: если меняем текст в TEdit ручками - все работат как надо. Если заполняем программно при помощи OpenDialod'a - не фурычит. Кто не верит - могу выслать исходники.


Digitman   (2004-06-30 17:05:00) [44]

знать ничего не знаю
ЭТО работает и будет работать во веки веков

var i: Integer
   s: string;
..
 s := 'Что-то там';
..

 showmessage('Перед записью : ' + s);
 MS.WriteBuffer(I, SizeOf(Integer));
 MS.WriteBuffer(S[1], I);

..
 MS.Position := 0;
..

 MS.ReadBuffer(I, SizeOf(Integer));
 SetLength(S, I);
 MS.ReadBuffer(S[1], I);
 showmessage('После чтения : ' + s);


romeo   (2004-06-30 16:59:00) [45]


> Digitman ©   (30.06.04 16:57) [5]

Блин, опечатка это! Естественно MS.Write(S[1], I);

Спешу, понимаете-ли...


Digitman   (2004-06-30 16:59:00) [46]

MS.Read(I, SizeOf(Integer));
  SetLength(S, I);
  MS.Read(S[1], I);

мда уж ... намек - в пустоту .. горбатого, как знаем, могила исправит


Digitman   (2004-06-30 16:57:00) [47]

MS.Write(I, SizeOf(Integer));
  MS.Write(S[1], I);


romeo   (2004-06-30 16:56:00) [48]


> Юрий Зотов ©   (30.06.04 16:49) [3]

Там вес есть :-)
Я же говорю, что разница только в том, как данные попадают в TEdit - ручками или как результат результат

if OPenDialog1.Execute
then edPath.Text := ExtractFilePath(OPenDialog1.FileName);


А... Ладно вот код чтения:
var
I: Integer;
begin
   MS.Read(I, SizeOf(Integer));
   SetLength(S, I);
   Read(S[1], I);
end;


Юрий Зотов   (2004-06-30 16:49:00) [49]

1. Зачем такая сложная многоступенчатая запись, если можно просто писать строку прямо в файл?
2. Вероятно, MS.Write, а не просто Write.
3. Код чтения покажите, плз. Там есть SetLength?


romeo   (2004-06-30 16:46:00) [50]

I>
> Гаврила ©   (30.06.04 16:44) [1]

Извините, куда пройти?<


Гаврила   (2004-06-30 16:44:00) [51]

А неужели сложно пройти отладчиком, и посмотреть, почему в файл ничего не пишется ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо