Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в файл 
:(
    Опции темы
ferum
Дата 17.4.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Приве всем.
Я хочу записать в файл число типа float.
(массивы через структуры мне не надо, т.к это поэлементное считывание)
а у меня в файле будет тысячи чисел.
Строку занести в файл тоже могу, а вот числа никак не получается.
Подскажите как это осуществить? 
PM MAIL   Вверх
_hunter
Дата 17.4.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



так а в чем проблема?
пишем 
WriteFile(hFile, (char*)number, sizeof(double), &numberOfBytesWritten, NULL);
и все... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 17.4.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



А можно  на конкретном примере?
float number=50;
DWORD numberOfBytesWritten;
 
PM MAIL   Вверх
_hunter
Дата 17.4.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



дык:
Код

float number = 50;
DWORD numberOfBytesWritten = 0;
WriteFile(hFile, (char*)number, sizeof(number), &numberOfBytesWritten, NULL);


в чем проблема-то? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Doc_d0s
Дата 17.4.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3




(char*)number

а как он флоат к строке приведет? не особо понятен механизм:?
может лучше взять функцию из серии Atof? 
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
ferum
Дата 17.4.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



[_hunter]

На строке
WriteFile(hFile, (char*)number, sizeof(number), &numberOfBytesWritten, NULL);

пишет ошибку
Incompatible type conversion


Если использовать atof 
(такая же ошибка: )
 
PM MAIL   Вверх
SergeCpp
Дата 17.4.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 10
Всего: 124



WriteFile(hFile, (void*)&number, sizeof(number), &numberOfBytesWritten, NULL);

// можно и char* оставить... если компилер не заругается...   

Это сообщение отредактировал(а) SergeCpp - 17.4.2006, 21:11
PM MAIL WWW ICQ   Вверх
ferum
Дата 17.4.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



  SergeCpp   
Компилит нормально только в файл какую-то лабуду скидывает.
У меня такое же было (массивы через структуры, 
там поэлементное считывание)
А можно ли считать весь файл?
 
PM MAIL   Вверх
ferum
Дата 18.4.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Нашёл ответ (на VINGRADe)

Код
  
double val = 1234.56;//что записываем
char *buf;// куда записываем
int digits = 6;//кол-во цифр, которые будут записаны
gcvt(val, digits, buf);  
  

Тему можно закрывать 
PM MAIL   Вверх
Earnest
Дата 18.4.2006, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Так бы сразу и сказал, что тебе в текстовом виде надо... Функций преобразования числа в строку - тьма. Начиная от найденного тобою gcvt до sprintf... 


--------------------
...
PM   Вверх
ferum
Дата 18.4.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



У меня возник вопрос
А как записать значение (число) на
следующую строку В ФАЙЛЕ
(на вторую) а так всё записывает на первую.(  for   не помогает) 
PM MAIL   Вверх
_hunter
Дата 18.4.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



пиши после числа 0х0D0A 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 18.4.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



А можно по-конкретнее(после какого числа)

Код
 
float val=1234.56;//что записываем
char *buf;// куда записываем
int digits =6;//кол-во цифр, которые будут записаны
int i;
DWORD numberOfBytesWritten; 

for (i=1;i<=5;i++)
{
   gcvt(val, digits, buf);
   WriteFile(hFile,buf,7,&numberOfBytesWritten, NULL);
}
  
PM MAIL   Вверх
_hunter
Дата 18.4.2006, 14:09 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



после 
WriteFile(hFile,buf,7,&numberOfBytesWritten, NULL);
напиши
WriteFile(hFile, "\r\n", 2, &numberOfBytesWritten, NULL);
( или наоборот ) 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 18.4.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



 hunter  спасибо
На другой проге пошло, на этой не хочет.(странно)
У меня вот возник вопрос по этой теме
А можно ли считать с файла весь текст (а не каждый элемент по отдельности). Инфы на эту тему у меня слишком мало.
 
PM MAIL   Вверх
_hunter
Дата 18.4.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



можно. ReadFile в соотв. буффер.
непонятно какая инфа ( кроме той, что есть в MSDN тебе нужна ) 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 18.4.2006, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



hunter  тебе:
У меня вопрос по предыдущей теме
Прога идёт!
Код
 
char str[]="Hello\0";
DWORD number; 
   WriteFile(hFile,str,sizeof(str),&number,NULL);
   WriteFile(hFile,"\r\n", 2, &number, NULL); 

А эта нет
Код
 
char *buf;// куда записываем
float val=1234.56;//что записываем
int digits =6;//кол-во цифр, которые будут записаны
DWORD number;

   gcvt(val, digits, buf);
   WriteFile(hFile,buf,7,&number, NULL);
   WriteFile(hFile,"\r\n",2,&number, NULL); 

Error: в строке WriteFile(hFile,"\r\n",2,&number, NULL); 

Если убрать в обоих прогах WriteFile(hFile,"\r\n",2,&number, NULL); 
то идут обе.

Инфв
В inete встречается и на русском с подробным описанием 
PM MAIL   Вверх
_hunter
Дата 18.4.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



во-первых: что значит "не идет" и что значит "Error"
во-вторых: а память под buf кто выделять будет? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 18.4.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



hunter ты прав  

память выделил (или распределил)  

Это сообщение отредактировал(а) ferum - 18.4.2006, 18:06
PM MAIL   Вверх
ferum
Дата 18.4.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Как узнать размер файла ?
(может есть какая функция)

  

Это сообщение отредактировал(а) ferum - 18.4.2006, 21:40
PM MAIL   Вверх
_hunter
Дата 19.4.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



есть.
называется она ( как ни странно ) GetFileSize 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 19.4.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



 hunter:  спасибо
я уже узнал smile
у меня вот с этой function возник вопрос
Как выделить память для size
DWORD size=GetFileSize (hFile, NULL);

 
PM MAIL   Вверх
_hunter
Дата 19.4.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



примерно так:
char* buffer = new char[size]; 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 19.4.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Не получается

Кусочек проги
Код
 
number=0;
DWORD size=GetFileSize (hFile, NULL);
char* buffer = new char[size];
ReadFile (hFile,(void*)buffer,size, &number, NULL); 
   

Это сообщение отредактировал(а) ferum - 19.4.2006, 15:23
PM MAIL   Вверх
_hunter
Дата 19.4.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



что не получается? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 19.4.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



походу не может выделить память под size
на 3-ей строке происходит стопор. 
PM MAIL   Вверх
_hunter
Дата 19.4.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



что значит "не может"?
что значит "происходит стопор"? ( причем на третьей строке ты размер файла определяеш )
учись правильно задавать вопросы -- чтобы информацию из тебя побитно вытаскивать не приходилось... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 19.4.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Вот такая вот непоняточка
Прога большая память уже загружена на другие переменные и на size
памяти не хватило (и надо её распределить для size).
Вот я думаю как распределить память с помощью (calloc,malloc)

В size память не выделяется, 
поэтому в size не записывается размер файла
Соответственно в переменную buffer ничего не записывается.

 
PM MAIL   Вверх
_hunter
Дата 19.4.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



шутки шутим? 4-х байт на стеке не хватило? еще и безо всяких сообщений об этом?..
явно с хендлом файла накосячил... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 19.4.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



С хЭндлом не мог. 
Он у меня используется только один раз при создании файла. 
PM MAIL   Вверх
_hunter
Дата 19.4.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



дык невыделение памяти под DWORD тоже произойти не могло... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 19.4.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



объявил DWORD size, как глобальную переменную
опять с памятью проблемка. (да уж)
 
PM MAIL   Вверх
_hunter
Дата 20.4.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



еще раз говорю -- нет там никакой проблемы с памятью
в чем она, кстати, выражается? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 20.4.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



С памятью проблема исчезла
Возникла новая тупо с выводом результата

Код
 
//Глобальные переменные
DWORD number;
DWORD size;
char szT[10000];
char *buff;
// эта частичка в WinMain
 number=0;
// хЭндл выше при создании файла
   hFile=CreateFile("winfile.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
   size = GetFileSize (hFile, NULL);
   buff=(char*) calloc(10000, sizeof(char));                         //add
   ReadFile (hFile, buff,size, &number, NULL);

   wsprintf(szT,"%s",buff);
   MessageBox(NULL,szT,"Info",MB_OK);
   free(buff);
   CloseHandle(hFile);  


Выводит результат => 0 (в MessageBox)
А должно в цикле от 0 до 10 
типо
1.32432       5.4552 ... 5.4552 
1.32432       5.4552 ... 5.4552 
....
1.32432       5.4552 ... 5.4552 

заносит в файл всё как надо (я заносил через gcvt), 
но не считывает.
Мож и обратно надо конвертить
хотя с малыми прогами
всё записывалось 
и считывалось без обратной конвертации .   

Это сообщение отредактировал(а) ferum - 20.4.2006, 14:51
PM MAIL   Вверх
_hunter
Дата 20.4.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



не понял ни что выводит ни что должно быть.
кстати, а не проще ли сразу buff выводить? зачем пляски с wsprintf? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ferum
Дата 20.4.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Да точно нафмга эти пляски smile)
Но всё равно результат 0

Мож обратно конвертить, на всякий случай (через atof чтоли).
Я могу всю прогу написать? а?

Только первый символ файла выводит (smile
  

Это сообщение отредактировал(а) ferum - 20.4.2006, 17:00
PM MAIL   Вверх
ferum
Дата 21.4.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Вобщем разобрался 
Функтион gcvt не записывает в файл десятичную точку,
у таких чисел как 1, 2 типа int она вместо точки ставит пробел
1 00 . И при считывании считывается всё до недопустимого знака то бишь пробела. 
Вот и недостатки конвертирования налицо_:(
 
PM MAIL   Вверх
ferum
Дата 21.4.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Всё разобрался 
ТЕМА ЗАКРЫТА  
PM MAIL   Вверх
Nemesis
Дата 24.4.2006, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: нет
Всего: 5



блин, как стереть сообщение? 

Это сообщение отредактировал(а) Nemesis - 24.4.2006, 19:35
--------------------
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1334 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.