Я пытаюсь использовать ifstream/ofstream для чтения/записи, но по некоторым причинам данные повреждаются по пути. Heres методы на чтение/запись и тест:Запись и чтение файла
void FileWrite(const char* FilePath, std::vector<char> &data) {
std::ofstream os (FilePath);
int len = data.size();
os.write(reinterpret_cast<char*>(&len), 4);
os.write(&(data[0]), len);
os.close();
}
std::vector<char> FileRead(const char* FilePath) {
std::ifstream is(FilePath);
int len;
is.read(reinterpret_cast<char*>(&len), 4);
std::vector<char> ret(len);
is.read(&(ret[0]), len);
is.close();
return ret;
}
void test() {
std::vector<char> sample(1024 * 1024);
for (int i = 0; i < 1024 * 1024; i++) {
sample[i] = rand() % 256;
}
FileWrite("C:\\test\\sample", sample);
auto sample2 = FileRead("C:\\test\\sample");
int err = 0;
for (int i = 0; i < sample.size(); i++) {
if (sample[i] != sample2[i])
err++;
}
std::cout << err << "\n";
int a;
std::cin >> a;
}
Он записывает длину правильно, считывает его правильно и начинает правильно читает данные, но в некоторой точке (в зависимости от входных данных, как правило, примерно в 1000'th байт) это идет не так, и все, что нужно, ошибочно. Почему это?
написать массив в этом Манер, вы должны преобразовать его в обугливается [] или символ * или с помощью петли и ostream & оператор << и IStream & оператор >> – Mykola
Составитель это с г ++ и она работает хорошо (побежал в 10 раз) , Какой компилятор вы используете? Я не очень уверен в вашей операции записи/чтения, используя ссылку на первый элемент вектора. Вы пытались использовать/while и читать/заполнять векторный элемент за элемент? – jpo38
В '(reinterpret_cast (& len), 4)' не предполагайте, что размер 'len' равен' 4'. Вместо этого используйте 'sizeof (len)'. –
NathanOliver