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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.09.2015, 19:25
Anton93 Anton93 вне форума
Прохожий
 
Регистрация: 20.02.2015
Сообщения: 27
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Каракули вместо текста

Считываю текст в переменную из файла, но в место теста китайские иероглифы, как исправить?

Код:
function FileOpenText(strFile:PChar):PChar;
var
  f:thandle;
  dwResSize, dwRead:DWORD;
  pRes: PChar;
begin
  result:='';
  F:=CreateFile(pchar(strFile), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if F=INVALID_HANDLE_VALUE then exit;
  dwResSize:=GetFileSize(F, nil);
  pRes:=SysGetMem(dwResSize);
  ReadFile(F, pRes^, dwResSize, dwRead, nil);
  CloseHandle(F);
  Result:=pRes;
end;

....

ShowMessage(FileOpenText('loginusers.txt'));

Ответить с цитированием
  #2  
Старый 18.09.2015, 22:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Какая версия дельфей и в какой кодировке записан файл?
Ответить с цитированием
  #3  
Старый 18.09.2015, 23:12
Anton93 Anton93 вне форума
Прохожий
 
Регистрация: 20.02.2015
Сообщения: 27
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Какая версия дельфей и в какой кодировке записан файл?
Delphi XE5. Кодировка стандартная, какая в win 7 в блокноте asci.

В файле данные такого типа:

Цитата:
Nickname{ "d4rkzy" }
Pass { "qwerty" }
url { "https://******.net/****.html" }
Ответить с цитированием
  #4  
Старый 19.09.2015, 03:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ага, вот тут, скорее всего, собака и порылась.
Первое, что смущает в твоем коде:
Код:
ReadFile(F, pRes^, dwResSize, dwRead, nil);
Зачем разименовывать указатель на буфер? PChar - это уже указатель. Убери "крышку".
Далее, если не поможет, начинаем разбираться с Unicode.
Для начала попробуй так:
Код:
ShowMessage(AnsiString(FileOpenText('loginusers.txt')));
А еще лучше, наверное, сделать так:
Код:
function FileOpenText(strFile:PChar):String;
var
  f:thandle;
  dwResSize, dwRead:DWORD;
  pRes: AnsiString;
begin
  result:='';
  F:=CreateFile(pchar(strFile), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if F=INVALID_HANDLE_VALUE then exit;
  dwResSize:=GetFileSize(F, nil);
  SetLength(pRes,dwResSize);
  ReadFile(F, pRes[1], dwResSize, dwRead, nil);
  CloseHandle(F);
  Result:=pRes;
end;
 
....
 
ShowMessage(FileOpenText('loginusers.txt'));

Кстати, вопрос. А зачем надо это делать через API? Стандарных функций паскаля недостаточно?

Последний раз редактировалось lmikle, 19.09.2015 в 03:11.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter