писане на двоични данни (std::string) в std::ofstream?

Имам обект std::string, съдържащ двоични данни, които трябва да запиша във файл. Може ли ofstream f("name"); f << s; да бъде проблематично по някакъв начин? Трябва да прочета данните обратно точно както бяха първоначално.

Разбира се, мога да използвам fwrite(s.c_str(), s.size(), 1, filep), има ли плюсове / минуси на двата метода?


person davka    schedule 18.03.2011    source източник
comment
Въпреки че това, което правите, е напълно валидно (не забравяйте да отворите ofstream в двоичен режим... независимо дали вашите данни са двоични или не, честно казано), бих използвал vector<char> за добавения фактор за добро усещане. Има ли причина да не го направиш?   -  person Lightness Races in Orbit    schedule 18.03.2011
comment
@Tomalak: Използвам набор от трансформаторни класове, които приемат и връщат string. string изглеждаше удобен интерфейс за манипулиране на буфери, като добавяне/заместване в друго съдържание и т.н. В един момент реших да дефинирам binaryString като basic_string<unsigned char>, но това изискваше твърде много време за рефакторинг, което нямах по това време. Но мога ли да използвам оператора << с vector<char>?   -  person davka    schedule 18.03.2011
comment
не Но пак не бих искал да използвам << за двоични данни така или иначе, тъй като мозъкът ми го чете като форматиран изход, което не е това, което правите. Отново, това е напълно валидно, но просто не бих обърквал мозъка си така. :) Родното добавяне обаче със сигурност е полезно.   -  person Lightness Races in Orbit    schedule 19.03.2011
comment
@TomalakGeret'kal et. ал... мога ли да привлека вниманието ви към този свързан въпрос: stackoverflow.com/questions/8230786/   -  person HostileFork says dont trust SE    schedule 23.11.2011


Отговори (1)


Трябва да сте добре, стига да отворите ofstream за двоичен достъп.

ofstream f("name", ios::binary | ios::out); 
f << s;

Не забравяйте да отворите файла си в двоичен режим, когато четете данните обратно.

person Jon    schedule 18.03.2011