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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2015, 19:54   #1
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
Восклицание Запись в файл

Почему используя следующий код записывается только первый символ строки в файл:

Код:
hFile := CreateFile(PChar(Path+'\my.txt'), GENERIC_WRITE, 0, nil, OPEN_ALWAYS, 0, 0);
 SetFilePointer(hFile, 0, nil, FILE_BEGIN);
 WriteFile(hFile, str, Length(str), Written, nil);
 CloseHandle(hFile);
Anton931 вне форума Ответить с цитированием
Старый 07.09.2015, 20:21   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

странно, что вообще записывает первый символ) попробуй:
Код:
 WriteFile(hFile, @str[1], Length(str), Written, nil);
GreenWizard вне форума Ответить с цитированием
Старый 07.09.2015, 20:38   #3
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
По умолчанию

Код:
procedure WriteTxt(str: String);
begin
  LogFile := CreateFile(PChar('my.txt'), GENERIC_WRITE, 0, nil, OPEN_ALWAYS, 0, 0);
 SetFilePointer(LogFile, 0, nil, FILE_BEGIN);
 WriteFile(LogFile, @str[1], Length(str), Written, nil);
 CloseHandle(LogFile);
end;
Выдает ошибку
Код:
[dcc32 Error] Project1.dpr(142): E2036 Variable required
Anton931 вне форума Ответить с цитированием
Старый 07.09.2015, 20:45   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

@ убери оно в одних ф-ях нужно, в других - нет
GreenWizard вне форума Ответить с цитированием
Старый 07.09.2015, 21:29   #5
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
По умолчанию

Все равно что то не то, записал только часть строки, а точнее только половину, строку 1234567890, в файл записал всего 12345
Anton931 вне форума Ответить с цитированием
Старый 07.09.2015, 21:58   #6
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от Anton931 Посмотреть сообщение
Почему используя следующий код записывается только первый символ строки в файл:

Код:
hFile := CreateFile(PChar(Path+'\my.txt'), GENERIC_WRITE, 0, nil, OPEN_ALWAYS, 0, 0);
 SetFilePointer(hFile, 0, nil, FILE_BEGIN);
 WriteFile(hFile, str, Length(str), Written, nil);
 CloseHandle(hFile);

Автор , попробуй такой вариант

Код:
procedure WriteTxt(const text: String);
var str : TFileStream;
     filename : string;
begin
  if text='' then exit;
  filename:= ExtractFilePath(Appliaction.Exename)+'log.txt';
  if fileexists(filename) then
  begin
    str := TFileStream.Create(filename, fmOpenReadWrite);
    str.Position := str.Size;
  end else
    str := TFileStream.Create(filename, fmCreate);
  // используем filename как буфер
  filename:=text+#13#10;
  str.Write(filename[1], length(filename));
  str.Free;
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 07.09.2015, 22:18   #7
Anton931
Пользователь
 
Регистрация: 20.02.2015
Сообщений: 35
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Автор , попробуй такой вариант

Код:
procedure WriteTxt(const text: String);
var str : TFileStream;
     filename : string;
begin
  if text='' then exit;
  filename:= ExtractFilePath(Appliaction.Exename)+'log.txt';
  if fileexists(filename) then
  begin
    str := TFileStream.Create(filename, fmOpenReadWrite);
    str.Position := str.Size;
  end else
    str := TFileStream.Create(filename, fmCreate);
  // используем filename как буфер
  filename:=text+#13#10;
  str.Write(filename[1], length(filename));
  str.Free;
end;
не подходит из-за применения TFileStream, в api геморно ее вставлять
Anton931 вне форума Ответить с цитированием
Старый 07.09.2015, 23:39   #8
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

тьфу! половину записало! Делфи 7+? у него же строки в юникоде и Length(s) нужно умножать на SizeOf(char) (или тупо на 2!)

Последний раз редактировалось GreenWizard; 07.09.2015 в 23:48.
GreenWizard вне форума Ответить с цитированием
Старый 08.09.2015, 00:09   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
а точнее только половину, строку 1234567890, в файл записал всего 12345
Дык XE и Length - количество символов в строке, а не её длина в байтах. Второй параметр просто str[1]
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.09.2015, 10:12   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Кароче!
Код:
WriteFile(hFile, PChar(str), Length(str) * SizeOf(Char), Written, nil);
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запись в файл izhtownfun PHP 3 08.05.2014 20:34
Запись информации в файл в файл Anubys Win Api 0 04.11.2011 23:27
запись в файл gamer123 Паскаль, Turbo Pascal, PascalABC.NET 6 09.06.2010 08:25
Запись в файл soonner Общие вопросы Delphi 5 21.03.2009 01:12