2015-09-08 1 views
2

Я разрабатываю в то время небольшую Filestoresystem, которая должна хранить некоторые файлы, такие как .png и так далее. , Таким образом, я читаю байты из .png в файле char, и размер вектора совпадает с размером изображения (это должно быть ОК). Затем я хотел сохранить байты в другом .png.Сохранение других файлов в собственном хранилище данных с помощью fstream

На самом деле, я создал файл успешно, но Файл полностью пуст.

Вот самый важный код, я думаю:

void storedFile::saveData(char Path[]){ 

std::fstream file; 
file.open(Path,std::ios::trunc|std::ios::out|std::ios::binary); 
if(!file.is_open()) 
    std::cout << "Couldn´t open saved File (In Func saveData())" << std::endl; 
file.write((char*)&Data,sizeof(char) * Data.size()); 
file.close();} 

Я думаю, что я сделал это правильно, но это не работает.

Опять же, байты .png хранятся в Data. Я тестировал после каждого открытия и чтения, если он был открыт и так далее, все работало нормально (коды ошибок не появлялись).

+0

Мы не знаем, что ' Data', а также почему 'std :: fstream :: write()' будет знать, что с ним делать. –

+0

Я не вижу здесь ничего плохого, возможно, вы могли бы добавить строку, в которой будете объявлять данные, а также распечатать результат file.write и file.close. – Marco

+0

Как мы узнаем, что Data.size()> 0? И что такое Data так или иначе? – Arkadiy

ответ

4

Эта часть выглядит странно:

file.write((char*)&Data,sizeof(char) * Data.size()); 
      ^^^^^^^^^^^^ 

Data.size() намек, что данные являются станд :: вектор, так & данных на самом деле не так, он должен быть (char*)Data.data()

+0

Его вектор Данные; Я попробую это завтра, спасибо за быстрый ответ! –

+0

Это работает! Мой .png-файл теперь будет сохранен снова правильно, я даже могу открыть его в проводнике. Еще раз спасибо за ваш очень быстрый ответ на мой вопрос, извините меня за мои плохие языковые навыки на английском языке. :) –

Смежные вопросы