1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#include <fstream>
#include <string>
#include <iostream>
void arraytofile(std::string str, int* ptr, int size)
{
std::fstream file(str, std::ios::out | std::ios::binary);
if (!file.is_open())
{
std::cout << "file opening failed!!!!\n";
// if the file failed to open do NOT continue trying to use it!
return;
}
for (int loop { }; loop < size; loop++)
{
// notice you are taking the size of the actual data type being written
// otherwise the alignment is all FUBARed
file.write(reinterpret_cast<char*>(&ptr[loop]), sizeof(int));
}
}
void filetoarray(std::string str, int* ptr, int size)
{
std::fstream file(str, std::ios::in | std::ios::binary);
if (!file.is_open())
{
std::cout << "file is not opened!!!!!\n";
return;
}
for (int loop { }; loop < size; loop++)
{
file.read(reinterpret_cast<char*>(&ptr[loop]), sizeof(int));
}
}
int main()
{
const int size = 5;
int array[size] = { 1, 2, 3, 4, 5 }; // initialize with ints, not chars.
int* intptr = array;
std::string str;
std::cout << "enter the name of the file: ";
std::cin >> str;
std::cout << '\n';
std::cout << "data is written to the file\n\n";
arraytofile(str, intptr, size);
int array2[size];
int* secptr = array2;
filetoarray(str, secptr, size);
std::cout << "Data in the file:\n";
for (int loop { }; loop < size; loop++)
{
std::cout << secptr[loop] << ' ';
}
std::cout << '\n';
}
| |