Форум программистов, компьютерный форум CyberForum.ru

Непонятки с чаром - C++

Восстановить пароль Регистрация
 
Kooos
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 10
29.11.2011, 00:17     Непонятки с чаром #1
Хочу написать обычную программу для записи текста введённого из Edit Control в txt-файл.
C++
1
2
3
4
5
6
7
8
9
10
11
DWORD i;
    filename=TEXT("d:\\lalala.txt");
    NumOfBytes=m_Screen.GetWindowTextLength();
    char* buf= new char [NumOfBytes];
    
    m_Screen.GetWindowText((LPTSTR)buf,NumOfBytes);
 
    FilePath=CreateFile(filename,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    
    WriteFile(FilePath,buf,NumOfBytes,&i,NULL);
    CloseHandle(FilePath);
если ввожу 1234567890 в файле сохраняется 12345.

Делал ещё так, строку
C++
1
char* buf= new char [NumOfBytes];
менял на
C++
1
TCHAR buf[100]
, выводит также 12345.
WriteFile возращает правильное кол-во записанных байт i. значит проблема в буфере. объясните какая.

и ещё вопрос: что делает эта запись (LPTSTR)buf? преобразование типов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 00:17     Непонятки с чаром
Посмотрите здесь:

C++ непонятки
Что-то не то с чаром... C++
непонятки с матрицой C++
C++ Непонятки по ссылкам
C++ Непонятки с wchar_t
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
29.11.2011, 00:34     Непонятки с чаром #2
Kooos,

У вас кодировка скорей всего многобайтная. И каждый символ у вас занимает два байта. Вам наверное надо в функции

C++
1
m_Screen.GetWindowText((LPTSTR)buf,NumOfBytes);
удвоить значение выражения NumOfBytes, или использовть что-то вроде NumOfBytes * sizeof( wchar_t )
Kooos
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 10
29.11.2011, 00:38  [ТС]     Непонятки с чаром #3
Спасибо. Заработало.
Кодировку можно как-то поменять?
Сыроежка
Заблокирован
29.11.2011, 00:43     Непонятки с чаром #4
Цитата Сообщение от Kooos Посмотреть сообщение
Спасибо. Заработало.
Кодировку можно как-то поменять?
Если используете MS VC++, то проще всего ее поменять в свойствах проекта.
Kooos
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 10
29.11.2011, 02:21  [ТС]     Непонятки с чаром #5
ещё вопрос из той же области.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HANDLE FilePath;
 DWORD NumOfBytes;
DWORD i;
LPCTSTR filename=TEXT("d:\\lalala.txt");
FilePath=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  
NumOfBytes=GetFileSize(FilePath,NULL);
 
char* buff= new char [NumOfBytes];
    
ReadFile(FilePath,buff,NumOfBytes,&i,NULL);
  CString s,j;
    for (DWORD b=0; b<NumOfBytes;b++){
        j.Format(_T("%c"),*(buff+b)); s+=j;}
    m_Screen.SetWindowText(s);
    CloseHandle(FilePath);
так работает, но подскажите, можно вывести информацию на экран без перехода в CString?а то как-то совсем не красиво.
Yandex
Объявления
29.11.2011, 02:21     Непонятки с чаром
Ответ Создать тему
Опции темы

Текущее время: 03:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru