Можно ли записать в несколько двоичных файлов в цикле - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь открыть двоичный файл, прочитать из него, а затем открыть несколько файлов с помощью std::ofstream и случайным образом записать в отдельные файлы. Тем не менее, я получаю некоторые значения мусора в записанном двоичном файле. Разве не возможно записать в несколько файлов paralel? В чем может быть причина этой проблемы?

Потому что, когда я создаю один из потоков и пишу все, это кажется нормальным. Вот мой код для записи в двоичный файл:

//For reading from a binary file
std::ifstream fileInput;
fileInput.exceptions(std::ifstream::failbit | std::ifstream::badbit);

const int numberOfFiles = 5;
std::ofstream outfile[numberOfFiles];

std::stringstream sstm;
for (int i = 0; i < numberOfFiles; i++)
{
    sstm.str("");
    sstm << "test" << i;
    outfile[i].open(sstm.str());
}

try
{
    fileInput.open("TestBinary.dat", std::ios::binary);
    float f;
    int newLineCounter = 0;
    int index = 0;

    while (fileInput.read(reinterpret_cast<char*>(&f), sizeof(float)))
    {
        outfile[index].write(reinterpret_cast<const char*>(&f), sizeof(float));
        newLineCounter++;

        // Since i am reading 3D points
        if (newLineCounter == 3)
        {
            index = rand() % numberOfFiles;
            newLineCounter = 0;
        }
    }

    for (int i = 0; i < numberOfFiles; i++)
    {
        outfile[i].close();
    }
    fileInput.close();
}
catch (std::ifstream::failure e) {
    std::cerr << "Exception opening/reading/closing file\n";
}

когда я читаю файл, я получаю такие значения мусора, как это: 979383418452721018666090051403776.000000 500207915157676809436722056201764864.000000 2.16899e+17

1 Ответ

1 голос
/ 11 ноября 2019

Вы открываете свои файлы в текстовом режиме. Вам нужно открыть их в двоичном режиме.

outfile[i].open(sstm.str(), ios_base::out | ios_base::binary);
...