Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: CreateFile изменение куска файла.  (Прочитано 8503 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« : 27-02-2013 12:36 » 

Народ дурацкий вопрос.
С какими флагами нужно открыть файл CreateFile чтоб поменять пару байт в начале файла.
Аналог "r+" для fopen.
« Последнее редактирование: 27-02-2013 12:41 от LemmonRus » Записан
darkelf
Молодой специалист

nl
Offline Offline

« Ответ #1 : 27-02-2013 12:56 » 

имхо - GENERIC_READ | GENERIC_WRITE
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 27-02-2013 13:07 » 

"поменять пару байт в начале файла" - нет такой стандартной операции. Даже у fopen. Ага

Если не побояться и задать вопрос, скажем, как-то так: "С какими флагами нужно открыть файл CreateFile для чтения/записи?"

В правильно заданном вопросе 90% ответа.

Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #3 : 27-02-2013 14:05 » 

"поменять пару байт в начале файла" - нет такой стандартной операции. Даже у fopen. Ага

Если не побояться и задать вопрос, скажем, как-то так: "С какими флагами нужно открыть файл CreateFile для чтения/записи?"
Не катит, режет файл под конец записи. fopen в режиме "r+" чем хорош открывает файл на чтение и запись при это указатель для записи стоит на начале файла двигаешь его куда надо, пишешь и можешь быть уверен что файл не обрежется под конец файла.

Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 27-02-2013 14:29 » 

Дык, как открываешь, как пишешь? Показывай.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
darkelf
Молодой специалист

nl
Offline Offline

« Ответ #5 : 27-02-2013 14:34 » 

"поменять пару байт в начале файла" - нет такой стандартной операции. Даже у fopen. Ага

Если не побояться и задать вопрос, скажем, как-то так: "С какими флагами нужно открыть файл CreateFile для чтения/записи?"
Не катит, режет файл под конец записи. fopen в режиме "r+" чем хорош открывает файл на чтение и запись при это указатель для записи стоит на начале файла двигаешь его куда надо, пишешь и можешь быть уверен что файл не обрежется под конец файла.
Так всё-таки, какую задачу именно Вам надо решить?
ещё есть функции SetFilePointer() и SetEndOfFile()
Записан
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #6 : 27-02-2013 14:45 » 

Мне нужно в начало файла записать
//Edited,State,Time1,Time2 глобально объявлены как int,int,LONGLONG,LONGLONG
BOOL Config_Write (const char *lpFileName)
{
   HANDLE h;
   char s2[255];   
   strcpy (s2, ThisWorkPath);//папка программы
   strcat (s2, lpFileName);//имя файла

   h = CreateFile (s2, GENERIC_WRITE|GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
   if (h != INVALID_HANDLE_VALUE)
   {
      DWORD d;
      WriteFile (h, &(Edited),   sizeof (int), &d, NULL);
      WriteFile (h, &(State),      sizeof (int), &d, NULL);
      WriteFile (h, &(Time1),   sizeof (LONGLONG), &d, NULL);//LONGLONG аналог unsigned int64
      WriteFile (h, &(Time2),      sizeof (LONGLONG), &d, NULL);
      CloseHandle (h);
   }
   return h != INVALID_HANDLE_VALUE;
}
Данные записываются,но файл обрезается под конец записи.
Из 14 килобайт становится 24 байта
Записан
darkelf
Молодой специалист

nl
Offline Offline

« Ответ #7 : 27-02-2013 14:53 » 

попробуйте поменять флаг CREATE_ALWAYS на OPEN_EXISTING
CREATE_ALWAYS Creates a new file. If the file exists, the function overwrites the file and clears the existing attributes.
Записан
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #8 : 27-02-2013 15:03 » new

попробуйте поменять флаг CREATE_ALWAYS на OPEN_EXISTING
CREATE_ALWAYS Creates a new file. If the file exists, the function overwrites the file and clears the existing attributes.
**** моя не внимательность меня когда-нибудь погубит.
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines