Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2011, 00:20   #1
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию Запись в файл

Не так давно решил дописать одну из рабочих программ по передаче файла. В итоге словил ошибку, что файл передается и принимается нормально, но пишется только в половину размера, причем винда уверенно кажет, что файл принят и записан байт в байт! Проблема обнаружилась в Delphi 2010, но почему-то не сразу. В итоге:

Код:
  hFile := FileCreate('C:\\Новая папка\\test.txt');
  FileOpen('C:\\Новая папка\\test.txt',  fmOpenWrite or fmShareDenyNone);
  FileWrite(hFile,'test',4);
  FileCLose(hFile);
выполняется с ошибкой. При просмотре в hex-редакторе, первые 2 байта - 00.

Дома тестил еще на 3-х машинах с аналогичной конфигурацией, везде одно и тоже. Докажите же мне, что это не чей-то злой умысел, а мои кривые руки!

OS: Win 7 Ultimate
hiho вне форума Ответить с цитированием
Старый 11.03.2011, 00:27   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> выполняется с ошибкой. При просмотре в hex-редакторе, первые 2 байта - 00.

юникод?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 11.03.2011, 00:29   #3
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию

хм... скорей всего, но точно не уверен
hiho вне форума Ответить с цитированием
Старый 11.03.2011, 00:30   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

тогда ошибки нет )
и, кстати, FileOpen() — это функция, а не процедура.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 11.03.2011, 00:35   #5
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию

а как заставить этот код работать как положено? А то раньше в седьмой дельфе такой проблемы не видел, а когда в принудительном порядке поставили семерку, оказалось что под нее идет только десятая версия, а там этот юникод на каждом шагу
hiho вне форума Ответить с цитированием
Старый 11.03.2011, 00:42   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

судя по тому, что у вас половина инфы пропадает, могу предположить, что данные вы храните в строке, а при записи указываете длину строку в символах (а не в байтах). начиная с 2009 дельфи тип string стал двухбайтовым. нужно хранить данные в AnsiString, а ваш пример может выглядеть так:

Код:
  FileWrite(hFile, AnsiString('test'), 4);
тогда будет работать примерно как раньше )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 11.03.2011 в 00:48.
veniside вне форума Ответить с цитированием
Старый 11.03.2011, 00:48   #7
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию

хех, и правда заработало, спасибо, а то я уже всю голову сломал
hiho вне форума Ответить с цитированием
Старый 11.03.2011, 04:50   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

правильно ставить для простых строк(string)
Код:
SizeOf(Char)*Length(string);
для AnsiString соответственно
Код:
SizeOf(AnsiChar)*Length(AnsiString);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в файл Jene4ka Общие вопросы Delphi 2 05.12.2010 21:31
Запись в файл (С) ya chef Помощь студентам 0 15.12.2009 13:49
Запись в файл (C++) Serant Помощь студентам 0 10.05.2009 09:49
Запись в файл [Smarik] Помощь студентам 4 07.05.2008 23:26
запись в файл Prisian Общие вопросы Delphi 6 24.07.2007 13:43