Сохранение данных в файл
Добрый день. Возникла проблема с сохранением и читанием этих данных из файла.
Есть массив из 5 структур. Все это забивается в ручную, после чего сохраняется в файл. Дальше из этого файла считываются данные в другой массив структур.
Вроде бы все просто, но вот в файл сохраняет какую-то крокозябру, в следствии чего считывается с него такая же крокозябра.
Вот немного кода:
Функция сохранения данных
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
struct data { char name[30]; int number; char name2[10]; }; int save(struct data data1[]) { FILE *file; if ((file = fopen("database.txt", "w")) == NULL) printf("error\n"); else { fwrite(&data1, sizeof(data), 5, file); } fclose(file); printf("Successful \n"); getch(); return 0; }
После открытия файла я вижу следующее(скрин)
Как я считываю данные в новый массив из файла:
1 2 3 4 5 6 7 8 9 10 11
if ((file = fopen("database.txt", "rb")) == NULL) { printf("error\n"); fclose(file); return 0; } else { for (int i = 0; i 5; i++) { fread(&data2, sizeof(data), 1, file); } }
Подскажите где моя ошибка
Сохранение данных из текстового файла в строку
Открыть текстовый файл example.txt, сохранить его содержимое в строку и вывести на экран.
Исходный код на языке C++
/** * Чтение данных из текстового файла в строку и вывод на экран */ #include #include using namespace std; int main(int argc, char* argv[]) < ifstream fp("example.txt", ios::in); if (fp.is_open()) < // Если файл открыт успешно // Получение размера файла fp.seekg (0, fp.end); int length = fp.tellg(); char *buffer = new char[length]; fp.seekg (0, fp.beg); // Считывание данных из файла fp.read(buffer, length); // Закрытие файла fp.close(); // Вывод данных на экран cout else < cerr return 0; >
C как сохранять данные
Столкнулся с такой вот проблемой. У меня есть программа — генератор паролей. Как мне сохранить данные из консоли (желательно одну только переменную = parol) допустим на диск С с именем файла = этой переменной.. Главное чтобы никаких там дополнительных команд, чтобы программа справлялась своими силами.
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
#include ostream file("parol.txt"); // КАК вариант просто "parol" file (&parol), sizeof(parol));
Если я помог вам — порадуйте меня, нажмите на весы слева
Пользователь
Регистрация: 26.09.2009
Сообщений: 81
Наверно я не правильно задал вопрос. Мне нужно сохранить одну единственную переменную (полученную во время работы программы) и имя файла = значению этой переменной.. Язык С
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
А ну тогда тебе надо значение этой переменной преобразовать в текст, например так как то
stroka[0] = parol%10000+49 //если пароль например пятизначный
stroka[1] = parol%1000+49 //уже вторая цифра и тд
А потом файл создать с именем этой строки, FILE* f = fopen(stroka, w);
Кажется, но я в си уже не силен
Для преобразования еще вроде функции есть, что-то вроде Atoi или что-то наподобие, для посимвольного преобразования. либо еще можно прибавлением к цифре
хотя блин для выделения разрядов все равно надо делить!
Как сохранять данные в файл С++ [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 4 года назад .
Я сделал простой цикл который считает числа и мне надо реализовать сохранения и загрузку данных. Надо что бы данные как то сохранялись и если я отключил цикл а потом снова запустил он продолжил считать.
for (size_t i = 0; i
Не обязательно простые примеры кидать, можно супер сложные я разберусь.
Отслеживать
задан 21 апр 2019 в 18:40
90 1 1 серебряный знак 8 8 бронзовых знаков
Ну делаем что-то типа for (size_t i = loadSavedValue(); i < 10000000; i++) < if (i % 10000 == 0) saveValue(i); >
21 апр 2019 в 18:43
@harry а можно более детально, я думал что это должно работать как то с fstream но я не уверен.
21 апр 2019 в 18:46
И еще интересно можно какие то другие данные получать а не числа, например может быть байты.
21 апр 2019 в 18:47
Возможный дубликат вопроса: Книги и учебные ресурсы по С++
21 апр 2019 в 18:47
В книги точно не будет того что мне нужно
21 апр 2019 в 18:51
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Ну вот вам пример — прерываете программу, она при новом запуске будет продолжать работу с последнего сохраненного значения.
#include #include using namespace std; int main(int argc, const char * argv[]) < long long current_value = 1; double current_sum = 0.0; < ifstream in("data"); if (in.is_open()) < in >> current_value >> current_sum; > > for(long long i = current_value; ; ++i) < current_sum += 1.0/i; if (i % 10000 == 0) < ofstream out("data"); out > >
В каждом конкретном случае надо смотреть, как сохранять и восстанавливать состояние.
В свое время еще под DOS’ом мне попадался код, который тупо сохранял всю память и состояние процессора, но в современных операционках, по-моему, это будет слишком сложным решением.