Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Запись и чтение из файла

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
госик



Зарегистрирован: 10.10.2006
Сообщения: 9

СообщениеДобавлено: Пт Ноя 17 2006 19:06    Заголовок сообщения: Запись и чтение из файла Ответить с цитатой

Нужно записать в файл массив целых чисел. А затем по одному их считывать, как это сделать? У меня ничего не выводится и ошибка, что примененные функции не для целых чисел.
Код:
ofstream out("test");
   if (!out){
      cout<<chtooem("Ошибка открытия файла для записи\n");
      return 1;
   }
   int A[n]={55, 12, 87, 76, 98, 24,  84, 27};
   int buf[n];
   out.write(A,n);
   out.close();
   ifstream in("test");
   if (!in){
      cout<<chtooem("Ошибка открытия файла для чтения\n");
      return 1;
   }
   while (!in.eof()){
      in.getline(buf,n);
      cout<<buf<<endl;
   }
   in.close();
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dimasm



Зарегистрирован: 25.04.2005
Сообщения: 454

СообщениеДобавлено: Сб Ноя 18 2006 00:07    Заголовок сообщения: Ответить с цитатой

а какой именно вид файла тебе нужен?
если текстовый - то чтобы записать число, переведи его в String или Char. с текстовым форматом проще и нагляднее
если бинарный - то там по другому, там и файлы меньше и скорость чтения выше

out.write(A,n);
А - это указатель на память, где начинается твой массив
n - длинна масива в памяти...
ты считаешь, что в памяти целое число знимает 1 бит? мне кажется не меньше 8
может стоит попробовать что-то типа
out.write(A,n*sizeof(int));

нашёл у себя в архивах такой код
Код:
void __fastcall LoadBinFile(String FileName)
{
    int *Data;
    int  Count;
    TFileStream *FStream;
    try{
        FStream=new TFileStream(FileName,fmOpenRead );
        FStream->Position = 0;
        FStream->Read(&Count,sizeof(Count));
        Data = new int[Count+1];
        for (int i=0;i<Count;i++)
            FStream->Read(&Data[i],sizeof(Data[i]));
        delete FStream;
    }
    catch(...)
    {
    };
    ....
    ....
    delete []Data;
    return 0;
};

в этом бинарнике, первое Int число - это длинна файла, вернее длинна массива чисел записанных в файле
_________________
С уважением Dimasm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
госик



Зарегистрирован: 10.10.2006
Сообщения: 9

СообщениеДобавлено: Сб Ноя 25 2006 18:29    Заголовок сообщения: Запись и чтение из файла Ответить с цитатой

Я переделала немного свой код:
Код:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include "windows.h"

using namespace std;
const int n=8;
string chtooem(string str)
{
   char* buf=new char[str.size()+1];
   CharToOem (str.c_str(),buf);
   string res(buf);
   delete[] buf;
   return res;
}
int main(int argc, char* argv[])
{
    ofstream out("test");
    if (!out){
        cout<<chtooem("ошибка открытия файла\n");
        return 1;
    }
   
    int A[]={55, 12, 87, 76, 98, 24,  84, 27};
   int buf[n];
   for (int i=0; i<n; i++)
         out << A[i] << " ";
    out.close();
   
    ifstream in("test");
    if (!in){
        cout<<chtooem("ошибка открытия файла\n");
        return 1;
    }

   while( in || !in.fail() )
    {
        int val;
        in>>val;
        cout << val << " ";
    }
    cout<<endl;
    in.close();
    return 0;
}

но теперь выводится такой результат:
55 12 87 76 98 24 84 27 27
т.е выводится еще одна лишняя 27.
?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dimasm



Зарегистрирован: 25.04.2005
Сообщения: 454

СообщениеДобавлено: Вс Ноя 26 2006 00:01    Заголовок сообщения: Ответить с цитатой

да, недавно на такую же каку попался...
попробуй так
Код:
   while( in || !in.fail() )
    {
        int val;
        in>>val;
        if(!in.fail())
            cout << val << "\n";
        else break;
    }


in.fail() меняется на TRUE, не когда подошёл последний блок файла, а когда попытались прочитать дальше

и мне кажется в строке
while( in || !in.fail() )
"in ||" - лишнее
_________________
С уважением Dimasm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
TeAnton



Зарегистрирован: 02.06.2007
Сообщения: 7

СообщениеДобавлено: Сб Июн 02 2007 01:40    Заголовок сообщения: Ответить с цитатой

нужен не in.fail(), а in.eof(), imho.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...