Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в txt файл 
V
    Опции темы
yngwie19
Дата 29.3.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



всем привет. Есть простенькая програмка, которая записывает в файл один символ. например:
Код

#include <windows.h>
#include <windowsx.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int)
{

    char szText = 1 + 'A';
    DWORD dwSize;

    HANDLE hFile = CreateFile("C:\\12-2.txt",GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
    if (hFile)
          WriteFile(hFile,&szText,1,&dwSize,NULL);
    


    CloseHandle(hFile);
    
        return 0;
}

в файл 12-2 должен записаться байт 'Б', у меня вопрос:
 - В  txt файл записывабтся байты в цифровом виде, а при открытии переводятся в ascii символы так? (т.е 'A' = 65 прибавляем 1 получаем 66 т.е B) только так это происходит?

Это сообщение отредактировал(а) yngwie19 - 29.3.2009, 20:04
PM MAIL   Вверх
bsa
Дата 29.3.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



yngwie19, текстовый файл от нетекстового в DOS и Windows отличается только наличием преобразования '\r\n' в '\n' при чтении и '\n' -> '\r\n' при записи. В других ОС (*nix) вообще нет понятия "текстовый файл", так как отличий нет никаких.
Все файлы состоят из байтов. Один байт кодирует один символ в ASCII таблице. Программа просмотра при выводе подставляет графическое изображение символа, соответствующее коду.
Тип char в Си/Си++ это такой целый знаковый тип, диапазон значений которого -128...+127. Фактически, он и является байтом. Функции вывода созданы так, чтобы выводить числа этого типа, как соответствующие им символы.
PM   Вверх
yngwie19
Дата 29.3.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



а почему если в файл записать строковый литерал, например: "простой текст", то при открытии мы увидми нечитаемые символы?
PM MAIL   Вверх
xvr
Дата 30.3.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(yngwie19 @ 29.3.2009,  22:29)
а почему если в файл записать строковый литерал, например: "простой текст", то при открытии мы увидми нечитаемые символы?

Действительно - почему?  smile   В порядке телепатии - вместо строкового литерала вы записали туда адрес строки. Или смотрите не в той кодировке. Или еще что нибудь  smile 
PM MAIL   Вверх
zim22
Дата 30.3.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(yngwie19 @  29.3.2009,  22:29 Найти цитируемый пост)
мы увидми нечитаемые символы?

вмысле? цензура?


--------------------
PM MAIL   Вверх
Dem_max
Дата 30.3.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Вроде все нормально
Код

    char szText[] = "простой текст";
    DWORD dwSize;

    HANDLE hFile = CreateFile("C:\\12-2.txt",GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
    if (hFile)
          WriteFile(hFile,&szText,sizeof(szText)-1,&dwSize,NULL);



    CloseHandle(hFile);



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
yngwie19
Дата 30.3.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Dem_max, да действительно. Скажи а почему ты указываешь кол-во записываемых байт как sizeof(szText)-1?s
sizeof() учититывает символ конца строки?
PM MAIL   Вверх
Dem_max
Дата 30.3.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



вроде учитывает, потому что выделается памяти  n+1 для szText, если использовать lstrlen он выдаст размер n


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.