Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Запись в файл |
Автор: ferum 17.4.2006, 17:40 |
Приве всем. Я хочу записать в файл число типа float. (массивы через структуры мне не надо, т.к это поэлементное считывание) а у меня в файле будет тысячи чисел. Строку занести в файл тоже могу, а вот числа никак не получается. Подскажите как это осуществить? |
Автор: _hunter 17.4.2006, 18:03 |
так а в чем проблема? пишем WriteFile(hFile, (char*)number, sizeof(double), &numberOfBytesWritten, NULL); и все... |
Автор: ferum 17.4.2006, 18:43 |
А можно на конкретном примере? float number=50; DWORD numberOfBytesWritten; |
Автор: _hunter 17.4.2006, 18:49 | ||
дык:
в чем проблема-то? |
Автор: Doc_d0s 17.4.2006, 19:15 |
(char*)number а как он флоат к строке приведет? не особо понятен механизм:? может лучше взять функцию из серии Atof? |
Автор: ferum 17.4.2006, 19:41 |
[_hunter] На строке WriteFile(hFile, (char*)number, sizeof(number), &numberOfBytesWritten, NULL); пишет ошибку Incompatible type conversion Если использовать atof (такая же ошибка: ) |
Автор: SergeCpp 17.4.2006, 20:56 |
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/writefile.asp(hFile, (void*)&number, sizeof(number), &numberOfBytesWritten, NULL); // можно и char* оставить... если компилер не заругается... |
Автор: ferum 17.4.2006, 21:20 |
SergeCpp Компилит нормально только в файл какую-то лабуду скидывает. У меня такое же было (массивы через структуры, там поэлементное считывание) А можно ли считать весь файл? |
Автор: ferum 18.4.2006, 00:00 | ||
Нашёл ответ (на VINGRADe)
Тему можно закрывать |
Автор: Earnest 18.4.2006, 08:29 |
Так бы сразу и сказал, что тебе в текстовом виде надо... Функций преобразования числа в строку - тьма. Начиная от найденного тобою gcvt до sprintf... |
Автор: ferum 18.4.2006, 13:01 |
У меня возник вопрос А как записать значение (число) на следующую строку В ФАЙЛЕ (на вторую) а так всё записывает на первую.( for не помогает) |
Автор: _hunter 18.4.2006, 13:10 |
пиши после числа 0х0D0A |
Автор: ferum 18.4.2006, 13:53 | ||
А можно по-конкретнее(после какого числа)
|
Автор: _hunter 18.4.2006, 14:09 |
после WriteFile(hFile,buf,7,&numberOfBytesWritten, NULL); напиши WriteFile(hFile, "\r\n", 2, &numberOfBytesWritten, NULL); ( или наоборот ) |
Автор: ferum 18.4.2006, 14:52 |
hunter спасибо На другой проге пошло, на этой не хочет.(странно) У меня вот возник вопрос по этой теме А можно ли считать с файла весь текст (а не каждый элемент по отдельности). Инфы на эту тему у меня слишком мало. |
Автор: _hunter 18.4.2006, 15:28 |
можно. ReadFile в соотв. буффер. непонятно какая инфа ( кроме той, что есть в MSDN тебе нужна ) |
Автор: ferum 18.4.2006, 16:33 | ||||
hunter тебе: У меня вопрос по предыдущей теме Прога идёт!
А эта нет
Error: в строке WriteFile(hFile,"\r\n",2,&number, NULL); Если убрать в обоих прогах WriteFile(hFile,"\r\n",2,&number, NULL); то идут обе. Инфв В inete встречается и на русском с подробным описанием |
Автор: _hunter 18.4.2006, 16:40 |
во-первых: что значит "не идет" и что значит "Error" во-вторых: а память под buf кто выделять будет? |
Автор: ferum 18.4.2006, 17:40 |
hunter ты прав память выделил (или распределил) |
Автор: ferum 18.4.2006, 19:02 |
Как узнать размер файла ? (может есть какая функция) |
Автор: _hunter 19.4.2006, 13:57 |
есть. называется она ( как ни странно ) GetFileSize |
Автор: ferum 19.4.2006, 14:22 |
hunter: спасибо я уже узнал ![]() у меня вот с этой function возник вопрос Как выделить память для size DWORD size=GetFileSize (hFile, NULL); |
Автор: _hunter 19.4.2006, 14:39 |
примерно так: char* buffer = new char[size]; |
Автор: ferum 19.4.2006, 14:57 | ||
Не получается Кусочек проги
|
Автор: _hunter 19.4.2006, 15:37 |
что не получается? |
Автор: ferum 19.4.2006, 16:14 |
походу не может выделить память под size на 3-ей строке происходит стопор. |
Автор: _hunter 19.4.2006, 16:30 |
что значит "не может"? что значит "происходит стопор"? ( причем на третьей строке ты размер файла определяеш ) учись правильно задавать вопросы -- чтобы информацию из тебя побитно вытаскивать не приходилось... |
Автор: ferum 19.4.2006, 16:53 |
Вот такая вот непоняточка Прога большая память уже загружена на другие переменные и на size памяти не хватило (и надо её распределить для size). Вот я думаю как распределить память с помощью (calloc,malloc) В size память не выделяется, поэтому в size не записывается размер файла Соответственно в переменную buffer ничего не записывается. |
Автор: _hunter 19.4.2006, 17:03 |
шутки шутим? 4-х байт на стеке не хватило? еще и безо всяких сообщений об этом?.. явно с хендлом файла накосячил... |
Автор: ferum 19.4.2006, 17:22 |
С хЭндлом не мог. Он у меня используется только один раз при создании файла. |
Автор: _hunter 19.4.2006, 17:32 |
дык невыделение памяти под DWORD тоже произойти не могло... |
Автор: ferum 19.4.2006, 19:08 |
объявил DWORD size, как глобальную переменную опять с памятью проблемка. (да уж) |
Автор: _hunter 20.4.2006, 10:31 |
еще раз говорю -- нет там никакой проблемы с памятью в чем она, кстати, выражается? |
Автор: ferum 20.4.2006, 14:46 | ||
С памятью проблема исчезла Возникла новая тупо с выводом результата
Выводит результат => 0 (в MessageBox) А должно в цикле от 0 до 10 типо 1.32432 5.4552 ... 5.4552 1.32432 5.4552 ... 5.4552 .... 1.32432 5.4552 ... 5.4552 заносит в файл всё как надо (я заносил через gcvt), но не считывает. Мож и обратно надо конвертить хотя с малыми прогами всё записывалось и считывалось без обратной конвертации . |
Автор: _hunter 20.4.2006, 14:53 |
не понял ни что выводит ни что должно быть. кстати, а не проще ли сразу buff выводить? зачем пляски с wsprintf? |
Автор: ferum 20.4.2006, 15:10 |
Да точно нафмга эти пляски ![]() Но всё равно результат 0 Мож обратно конвертить, на всякий случай (через atof чтоли). Я могу всю прогу написать? а? Только первый символ файла выводит ( ![]() |
Автор: ferum 21.4.2006, 14:13 |
Вобщем разобрался Функтион gcvt не записывает в файл десятичную точку, у таких чисел как 1, 2 типа int она вместо точки ставит пробел 1 00 . И при считывании считывается всё до недопустимого знака то бишь пробела. Вот и недостатки конвертирования налицо_:( |
Автор: ferum 21.4.2006, 22:23 |
Всё разобрался ТЕМА ЗАКРЫТА |
Автор: Nemesis 24.4.2006, 19:31 |
блин, как стереть сообщение? |