Не используя средства ввода-вывода С++ в течение длительного времени (вместо использования операций API C linux), я пытаюсь хотя бы ознакомиться с тем, как работает С++. Я работаю под Ubuntu 12.04., в соответствии с C++98, используя gcc -Wall, который компилируется без ошибок или предупреждений. Проблема возникла, когда мне нужно было создать новый файл, в который я сначала напишу, а затем прочитаю. Проблема заключается в следующем:
#include <fstream>
std::fstream::openmode o_M = std::fstream::in | std::fstream::out;
std::fstream::openmode o_M1 = o_M | std::fstream::trunc;
std::fstream* preproc;
preproc = new std::fstream(out_Name.c_str(), o_M1); // (1)
if ( !(preproc->good()) )
errExit(1, "can't open file <%s>", out_Name.c_str());
preproc->put('c');
(*preproc) << "foo";
Насколько я понимаю, это должно записать в файл "cfoo"; однако ничего не записывается, а файл создается с соответствующими разрешениями. Я перебрал множество итераций того, что может быть ложным (очистка потока, открытие в разных режимах, явное открытие файла, на который указывает файл;...), но безрезультатно. Кроме того, ранее в том же проекте я без проблем создаю и использую указатель fstream на существующий файл (используя тот же синтаксис, без квалификаторов openmode (конечно, я пытался не использовать openmodes и для файла выше)) - чтение только из существующего файла.
Когда я вместо этого использую доступ без указателя, как в
std::fstream TEST(out_Name.c_str(), o_M1); // (etc, ancillary changes)
все работает нормально.
Я смущен. Я, вероятно, не вижу леса за деревьями, и был бы благодарен за то, что кто-то указал, что мне не хватает.
TEST
вообще не должно быть там, то значительно поможет удаление его из внутренностей. поскольку он опубликован и описан, похоже, вы ожидаете записи через два разных потока открытых файлов в один и тот же файл для поддержания порядка операций записи и синхронизации. Надеюсь, понятно, как это можно увидеть таким образом. Таким образом, настоящая проблема заключается в том, что динамически открытыйstd::fstream
, похоже, не записывает в ваш целевой файл, верно?TEST
не имеет к этому никакого отношения? - person WhozCraig   schedule 21.05.2014cfoobar
, как и ожидалось. В любом случае, удачной поездки. - person WhozCraig   schedule 21.05.2014