Работа с бинарными файлами

 
0
 
C++
ava
ioManip | 06.10.2013, 06:45
Привет! smile  Хочу создать бинарный файл. Записать в него случ. числа и вывести их!
Но не выходит:

void CreateFile()
{
    fstream binFile("file", fstream::in | fstream::out | fstream::binary);
    
    int n; // количество чисел в файле
    int rand_number;
    
    srand(time(NULL));
    
    cout << "Сколько чисел записать в файл?" << endl;
    cout << "-> ";
    cin >> n; 
   
    while (!binFile.eof())
    {
        for (int i = 0; i < n; i++)
        {
            rand_number = rand() % 10;
            binFile.write((const char*) &rand_number, sizeof(int));  
        }
    }
    
    while(!binFile.eof())
    {
        binFile.read((char*) &rand_number, sizeof(int));
    }
}

И еще, после создания, бинарный файл должен появиться в директории?(а то у меня нету)
Comments (5)
ava
Чупакабро | 06.10.2013, 09:07 #
Цитата (ioManip @  6.10.2013,  05:45 findReferencedText)
 

fstream binFile("file", fstream::in | fstream::out | fstream::binary);

Забыл fstream::trunc - создает новый файл


Цитата (ioManip @  6.10.2013,  05:45 findReferencedText)
   

while (!binFile.eof())   {  
   for (int i = 0; i < n; i++)  {    
  rand_number = rand() % 10;    
   binFile.write((const char*) &rand_number, sizeof(int));    
   }    

}

while не нужен! Так как файл еще пустой, так ты никогда не зайдешь в цикл.
Перепиши так:

for (int i = 0; i < n; i++)
        {
            rand_number = rand() % 10;
            binFile.write((const char*) &rand_number, sizeof(int));  
        }
ava
ioManip | 08.10.2013, 02:57 #
Переписал вот так:

void CreateFile()
{
    fstream binFile("file", fstream::in | fstream::out | fstream::trunc| fstream::binary);
    
    int n; // количество чисел в файле
    int rand_number;
    
    srand(time(NULL));
    
    cout << "Сколько чисел записать в файл?" << endl;
    cout << "-> ";
    cin >> n; 
   
    for (int i = 0; i < n; i++)
    {
       rand_number = rand() % 10;
       binFile.write((const char*) &rand_number, sizeof(int));  
    }
     
    binFile.seekg(0, fstream::beg);
    while(!binFile.eof())
    {
        binFile.read((char*) &rand_number, sizeof(int));
        cout << rand_number << " ";
    }
    
    binFile.close();
}


Но при попытке вывести содержимое файла, выводит на 1 число больше.
ava
xvr | 08.10.2013, 12:42 #
Цитата (ioManip @  8.10.2013,  02:57 findReferencedText)
Но при попытке вывести содержимое файла, 2 последние числа всегда оказываются одинаковыми. Почему?

Потому что eof() выставляется после неудачной попытки считать данные (за границей файла). При этом read() в ваш rand_number ничего не записывает
ava
ioManip | 08.10.2013, 14:42 #
xvr, эмм..то есть это нормально?
ava
xvr | 08.10.2013, 18:24 #
Цитата (ioManip @  8.10.2013,  14:42 findReferencedText)
то есть это нормально? 

Да
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit