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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CFile Read 
:(
    Опции темы
icepro
Дата 12.3.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 20.11.2006

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



Код

#include <afx.h>
#include <iostream>

using namespace std;

void main()
{
    CFile File;
    char * FileName = "file.txt";

    if (!File.Open(FileName,CFile::modeWrite,NULL)) { return; }
    char Buffer[100];
    cin >> Buffer;
    File.Write(&Buffer,sizeof(Buffer));
    File.Close();

    if (!File.Open(FileName,CFile::modeRead,NULL)) { return; }
    int Pos;
    cout << "Input position of the symbol to read: " << endl;
    cin >> Pos;
    char RBuffer[2];
    File.Seek(Pos,CFile::begin);
    File.Read(&RBuffer,sizeof(RBuffer));
    cout << endl << RBuffer;
    File.Close();

    cin.get();
    cin.get();
}


есть консольный проект с текстом что выше. после того как ввел данные они записываются в файл, но он до конца (если не все 100 символов забиты) добивается мусором, но то не столь важно, хотя если важно то поясните в чем трабла... но важнее то что в этой ситуации когда я читаю из файла то в принципе все ок, кроме того что строка состоит не из 2 символов а больше, и первых два это то что нужно а остальное мусор, всякие квадратики и т.п. что делать? как сделать нормальный вывод?
PM MAIL   Вверх
chaos
Дата 12.3.2009, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



icepro
Код

char Buffer[100] = {0}


или

Код

::ZeroMemory(Buffer, 100);

PM WWW   Вверх
mrbrooks
Дата 12.3.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



icepro, интересная братская могила. почему бы сразу не использовать файловый ввод/вывод в стиле С++?
PM MAIL   Вверх
icepro
Дата 12.3.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 20.11.2006

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



Код

#include <afx.h>
#include <iostream>

using namespace std;

void main()
{
    CFile File;
    char * FileName = "file.txt";

    if (!File.Open(FileName,CFile::modeWrite,NULL)) { return; }
    char Buffer[100];
    ZeroMemory(Buffer, 100);
    cin >> Buffer;
    File.Write(&Buffer,sizeof(Buffer));
    File.Close();

    if (!File.Open(FileName,CFile::modeRead,NULL)) { return; }
    int Pos;
    cout << "Input position of the symbol to read: " << endl;
    cin >> Pos;
    char RBuffer[2];
    File.Seek(Pos,CFile::begin);
    File.Read(&RBuffer,sizeof(RBuffer));
    cout << endl << RBuffer;
    File.Close();

    cin.get();
    cin.get();
}


результат

user posted image

что за окончание после 56??
PM MAIL   Вверх
zim22
Дата 12.3.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(icepro @  12.3.2009,  21:30 Найти цитируемый пост)
что за окончание после 56??

палочки и ромбик.


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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 20.11.2006

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



Очень смешно!! А как от этого избавиться??
PM MAIL   Вверх
Anikmar
Дата 13.3.2009, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(icepro @  12.3.2009,  21:30 Найти цитируемый пост)
char RBuffer[2];
    File.Seek(Pos,CFile::begin);
    File.Read(&RBuffer,sizeof(RBuffer));
    cout << endl << RBuffer;

Вы выделяете 2 байта под буферю
Затем считываете 2 байта
Но вы не оставляете место под завершающий 0.
Отсюда - мусор.
Попробуйте так:
    char RBuffer[3] = {0};
    File.Seek(Pos,CFile::begin);
    File.Read(&RBuffer,sizeof(RBuffer)-1);
    cout << endl << RBuffer;

PM MAIL ICQ   Вверх
WinAx
Дата 13.3.2009, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.10.2008
Где: Украина, Луцк

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



Если способ реализации несущественный, то вот тебе твоя программа smile 

Код

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void main()
{
    char FileName[] = "file.txt";
    ofstream hFile(FileName);
    if(!hFile){return;}
    string Buffer;
    cin >> Buffer;
    hFile << Buffer;
    hFile.close();
    fstream hRFile(FileName);
    if(!hRFile){return;}
    int pos;
    cout << "Input position of the symbol to read: " << endl;
    cin >> pos;
    hRFile.seekp(pos);
    char RBuffer[3];
    hRFile.read(RBuffer, 2);
    RBuffer[2]=0;
    cout << RBuffer << endl;
    hRFile.close();
}


Если что не ясно, могу пояснить.

Это сообщение отредактировал(а) WinAx - 13.3.2009, 02:23
PM MAIL WWW ICQ   Вверх
icepro
Дата 13.3.2009, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 20.11.2006

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



Способ реализации существенен.
Предпоследний вариант очень помог, спасибо!
PM MAIL   Вверх
WinAx
Дата 13.3.2009, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 4.10.2008
Где: Украина, Луцк

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



Цитата(icepro @  13.3.2009,  02:26 Найти цитируемый пост)
Способ реализации существенен.


А, ну да, как это я сам не догадался...  smile 
PM MAIL WWW ICQ   Вверх
mrbrooks
Дата 13.3.2009, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



WinAx,   smile 
все таки файловый ввод/вывод в стиле С++ рулит  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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