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

Поиск:

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


Новичок



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

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



сабж, вот мой код
Код

#include <windows.h>
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#define SLEEP_TIME 60005

void main()
{
    FILETIME tmpLWriteTime;
    bool first=true;
    while (1)
    {        
        FILETIME createTime, LAccessTime, LWriteTime;
        HANDLE hFile=NULL; 
        hFile=CreateFile((LPCWSTR)"C:\\test1.txt",GENERIC_READ,
            (FILE_SHARE_READ | FILE_SHARE_WRITE)
            ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if  (hFile != NULL)
        {
            GetFileTime(hFile,&createTime, &LAccessTime, &LWriteTime);
            printf("hFile != NULL \n");
            if (first) 
            {
                printf("first \n");
                tmpLWriteTime = LWriteTime;
                first = false;
                continue;
            }
            SYSTEMTIME STWriteTime, tmpSTWriteTime;
            FileTimeToSystemTime(&LWriteTime, &STWriteTime); 
            FileTimeToSystemTime(&tmpLWriteTime, &tmpSTWriteTime);
            printf("%d \n", STWriteTime.wMinute);
            printf("%d \n", tmpSTWriteTime.wMinute);
            if (STWriteTime.wMilliseconds != tmpSTWriteTime.wMilliseconds) 
            {
                printf("modified \n");
                tmpLWriteTime = LWriteTime;
            }
            hFile = NULL;
        }
        Sleep(SLEEP_TIME);
    } 
}

PM MAIL   Вверх
jimbo
Дата 13.4.2011, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



hFile = null - обнуляет хендл, но не закрывает его. попробуйте
Код

CloseHandle(hFile)



--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
tim91
Дата 13.4.2011, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

printf("%d \n", STWriteTime.wMinute);
printf("%d \n", tmpSTWriteTime.wMinute);


все равно выводит одинаковые числа, причем как ни запущу - одно и тоже (даже после изменения файла)
PM MAIL   Вверх
jimbo
Дата 13.4.2011, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



Код

LAccessTime


Это время последнего доступа. Я как вижу вы в файл то ничего не пишете, смотрите не то время то бишь.

И после 
Код

if (first) 
            {
                printf("first \n");
                tmpLWriteTime = LWriteTime;
                first = false;
//////// CloseHandle(hFile);        - не забудьте
                continue;
            }


Зачем вообще это? Закрыть хендл также надо

Это сообщение отредактировал(а) jimbo - 13.4.2011, 20:30
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
tim91
Дата 13.4.2011, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(jimbo @ 13.4.2011,  20:28)
Код

LAccessTime


Это время последнего доступа. Я как вижу вы в файл то ничего не пишете, смотрите не то время то бишь.

И после 
Код

if (first) 
            {
                printf("first \n");
                tmpLWriteTime = LWriteTime;
                first = false;
//////// CloseHandle(hFile);        - не забудьте
                continue;
            }


Зачем вообще это? Закрыть хендл также надо

в файл пишу руками, открыв в блокноте.

Код

if (first) 
            {
                printf("first \n");
                tmpLWriteTime = LWriteTime;
                first = false;
                CloseHandle(hFile);
                continue;
            }


для первоначальной инициализации tmpLWriteTime. Исправил, все равно одно и тоже число 52428, хотя до этого изменил файл.
PM MAIL   Вверх
volatile
Дата 14.4.2011, 02:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(tim91 @  13.4.2011,  20:49 Найти цитируемый пост)
все равно одно и тоже число 52428

52428 = 0xCCCC

в дебаговом режиме все стековые переменные затирются 0xCC,
отсюда можно сделать вывод, что
у вас просто вообще не считывается время из файла. где-то происходит ошибка.
нужно проверять после каждой апишной функции.

Цитата(tim91 @  13.4.2011,  19:27 Найти цитируемый пост)
 if  (hFile != NULL)
а это кстати вообще не проверка. нужно проверять на INVALID_HANDLE_VALUE

smile
PM MAIL   Вверх
xvr
Дата 14.4.2011, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(tim91 @  13.4.2011,  19:27 Найти цитируемый пост)
(LPCWSTR)"C:\\test1.txt"

Это неправильно, у вас файл не открывается. Надо L"C:\\test1.txt" (как минимум)

PM MAIL   Вверх
tim91
Дата 14.4.2011, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @ 14.4.2011,  12:56)
Цитата(tim91 @  13.4.2011,  19:27 Найти цитируемый пост)
(LPCWSTR)"C:\\test1.txt"

Это неправильно, у вас файл не открывается. Надо L"C:\\test1.txt" (как минимум)

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

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


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

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


 




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


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

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