if (FileExists(_metaFileName.c_str()))
{
_metaFile.open(_metaFileName.c_str(), ios::binary | ios::in | ios::app);
_metaFile.seekg(ios_base::beg);
while (! _metaFile.eof())
{
cCachedFile * fl = new cCachedFile();
_metaFile.read((char *) fl, sizeof(cCachedFile));
if (_metaFile.gcount() == 0)
break;
else
_listFiles.push_back(fl);
}
}
Скажите, пожалуйста, что тут не так, ибо когда файл считан в vector, то поля url и pathToFile содержат мусор, тогда как все все остальные (включая fileName) содержат именно то, что должны.
RK>Скажите, пожалуйста, что тут не так, ибо когда файл считан в vector, то поля url и pathToFile содержат мусор, тогда как все все остальные (включая fileName) содержат именно то, что должны.
std::string неслзя тупо взять и записать как структуру, потому-что это полнценный класс, с указателями и т.д.
И вообще нехорошо записывать так как ты делаешь. если уж нужно что-то в поток записать, то переопредели операторы << и >> для работы с твоим классом
У меня к тебе еще один вопросик. Вот допустим появилась ситуация, когда мне необходимо изменить одну из записей в файле, или же вообще удалить её. Можно ли сделать это средствами fstream? И, если да, то как?
Здравствуйте, R1K0, Вы писали:
RK>Здравствуйте, catBasilio
RK>Большой спос
RK>У меня к тебе еще один вопросик. Вот допустим появилась ситуация, когда мне необходимо изменить одну из записей в файле, или же вообще удалить её. Можно ли сделать это средствами fstream? И, если да, то как?
RK>Может ссылочка какая есть или еще чего?
Хочется свой лисапед аля новая крутая БД написать? Правильней в файле хранить данные а не обрабатывать.
Здравствуйте, R1K0, Вы писали:
RK>Здравствуйте, abrec, Вы писали:
A>>Хочется свой лисапед аля новая крутая БД написать? Правильней в файле хранить данные а не обрабатывать.
RK>Неа. Храниться и будут, а изменятся если и будут, то настолько редко, что БД для этого прикручивать не хочется.
Да я про то, что правка, добавление, удаление прямо в файле — это типа БД. Да и то они так не делают. Тебе это надо?
Что мешает считать файл в типа вектор структур поправить нужную (добавить удалить) и сбросить обратно в файл.
Здравствуйте, abrec, Вы писали:
A>Да я про то, что правка, добавление, удаление прямо в файле — это типа БД. Да и то они так не делают. Тебе это надо? A>Что мешает считать файл в типа вектор структур поправить нужную (добавить удалить) и сбросить обратно в файл.
Вот пытаюсь делать по совету и столкнулся с такой проблемой:
1. Файл создан успешно;
2. По завершению работы в него сбрасываются все элементы вектора;
3. Перезапуск проги — считываю информацию из файла успешно;
4. Опять дохожу до завершения работы... и вот тут начинается самое интересное:
4.1. Открываю файл с флагами ios::binary | ios::trunc | ios::out;
4.2. Все хорошо — файл обрезается до нулевой отметки;
4.3. Далее я хочу записать в файл информацию из вектора — что и делаю;
4.4. Но по завершении работы проги вижу — что файл так и остался пустым.
Функция записи в файл и в 1й иво 2й запуск одинаковая. Из-за чего это может возникнуть скажите ПЛЗ.
Здравствуйте, R1K0, Вы писали:
RK>Здравствуйте, abrec.
RK>Вот пытаюсь делать по совету и столкнулся с такой проблемой: RK>1. Файл создан успешно; RK>2. По завершению работы в него сбрасываются все элементы вектора; RK>3. Перезапуск проги — считываю информацию из файла успешно; RK>4. Опять дохожу до завершения работы... и вот тут начинается самое интересное: RK> 4.1. Открываю файл с флагами ios::binary | ios::trunc | ios::out; RK> 4.2. Все хорошо — файл обрезается до нулевой отметки; RK> 4.3. Далее я хочу записать в файл информацию из вектора — что и делаю; RK> 4.4. Но по завершении работы проги вижу — что файл так и остался пустым.
RK>Функция записи в файл и в 1й иво 2й запуск одинаковая. Из-за чего это может возникнуть скажите ПЛЗ.
Извините, вопрос не по теме. Замечено наличие людей любящих символ подчеркивания в именах переменных, типов и т. д. Причем доходит до маразма — начинают вставлять 2 подряд символа подчеркивания, в начале имени, в конце имени или в двух сторон? Как вы например объясните разницу _metaFile и record_. Почему в одном случае так, а в другом эдак?
ИМХО нужно придерживаться какой-то стилистики иначе код читать просто раздражает .
Здравствуйте, vvv104, Вы писали:
V>Извините, вопрос не по теме. Замечено наличие людей любящих символ подчеркивания в именах переменных, типов и т. д. Причем доходит до маразма — начинают вставлять 2 подряд символа подчеркивания, в начале имени, в конце имени или в двух сторон? Как вы например объясните разницу _metaFile и record_. Почему в одном случае так, а в другом эдак?
V>ИМХО нужно придерживаться какой-то стилистики иначе код читать просто раздражает .
Так я и придерживаюсь
переменная типа _nameOfVar — private атрибут класса
переменная типа nameOfVar_ — входной параметр метода
RK>Скажите, пожалуйста, что тут не так, ибо когда файл считан в vector, то поля url и pathToFile содержат мусор, тогда как все все остальные (включая fileName) содержат именно то, что должны.
конечно не так, нельзя так string сериализовать, используй boost::serialization либо operator<<, operator>>
Ничто не ограничивает полет мысли программиста так, как компилятор.
Здравствуйте, R1K0, Вы писали:
RK>Скажите, пожалуйста, что тут не так, ибо когда файл считан в vector, то поля url и pathToFile содержат мусор, тогда как все все остальные (включая fileName) содержат именно то, что должны.
В некоторых реализациях STL (например, от Microsoft), если строка короче некоторого количества символов (у MS это 16), то эти символы хранятся в самой структуре, а не по указателю.
_BUF_SIZE = 16 / sizeof (_Elem) < 1 ? 1 : 16 / sizeof(_Elem)
union _Bxty
{ // storage for small buffer or pointer to larger one
_Elem _Buf[_BUF_SIZE];
_Elem *_Ptr;
} _Bx;
Поэтому, видимо, fileName содержит то, что должен, а более длинные url и pathToFile нет.