Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
#1

MS VC++ WinApi32 - C++

15.02.2011, 17:42. Просмотров 1366. Ответов 11
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// win_api.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    WIN32_FIND_DATA wf;
    HANDLE FF;
    FILETIME gettime;
    SYSTEMTIME systime;
    GetLocalTime(&systime);
 
    TCHAR dir[] = _T("D:/tasm//*.LST");
    FF = FindFirstFile(dir,&wf);
    gettime = wf.ftLastWriteTime;
     if (FF == INVALID_HANDLE_VALUE) 
   {
      cout << "FindFirstFile failed: " << GetLastError() << "\n";
   } 
   else 
   {
      cout << "The first file found is:" << wf.cFileName << "\n";
   }
    system("pause");
    
}
в общем я ищу файл по шаблону и должен его вывести на экран его имя, если дата редактирования меньше чем заданая... вопрос, как мне сконвертировать дату редактирования, во что-то с чем можно было бы сравнивать...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2011, 17:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос MS VC++ WinApi32 (C++):

Командная строка. WinAPI32 - C++ WinAPI
Добрый день! Приведите пример ввода данных в командной строке, более 1-го данного, и распознавания данных в WinMain. ...

Создать окно WINAPI32 - C++ WinAPI
Помогите написать программу. Создать главное окно с пиктограммой , с областью заголовка, рамкой и с системным меню: “Каталоги”,...

WinAPI32 - в окне с сообщением выводятся иероглифы - C (СИ)
Читаю книжку по WinAPI32, в книжке приведен листинг простейшей программы: #include &lt;windows.h&gt; #define UNICODE int APIENTRY...

Значения констант или где скачать полную версию WinAPI32.txt? - Visual Basic
Дело в том, что в помощи я читаю о константе, а в Api Viewer'е ее нет. Вот эти константы: SPI_GETACTIVEWINDOWTRACKING ...

Создание приложений работающих с многопоточными файлами системы NTFS с использованием winAPI32 для python - Python
Здравствуйте! Я пытаюсь перевести код с c++ на python. В последней строке ошибка - syntax error. - именно функции WriteFile - но именно в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.02.2011, 17:56 #2
FileTimeToLocalFileTime - может помочь.
А там ну ты и сравнивай обычным значком >\<.
ТаймФормат он и в Африке такой же.
1фиг в Винде время будет в формате секунд от 1го января 1970го, если я не ошибаюсь.
И учти, что ГетЛокалТайм заносит данные в структуру, так что... либо пользуй другую функцию, либо раскидывай то или иное время в общий формат. А это деление\умножение на год\месяц\день\час\минута\секунда
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
15.02.2011, 17:56  [ТС] #3
временно потерто, ушел тестить.
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
15.02.2011, 18:02  [ТС] #4
сделал так... ничего =\
C++
1
2
gettime = wf.ftLastWriteTime;
    FileTimeToLocalFileTime(&gettime,&loctime);
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.02.2011, 18:05 #5
Эта функция для приведения времени, записанного в файле, к часовому поясу твоего локального времени. К примеру твое время и время по Гринвичу различны...
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
15.02.2011, 18:09  [ТС] #6
Цитата Сообщение от zulkis Посмотреть сообщение
Эта функция для синхронизации твоего времени и времени, записанного в файле. К примеру твое время и время по Гринвичу различны...
тогда вопрос по другому...
вот я нашел файл, получил его атрибуты, среди которых время последнего редактирования.
Далее у меня есть какая-то переменная(вопрос еще, как туда правильно записать с какой датой сравнивать?), и как сравнить этот атрибут с переменной?
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.02.2011, 18:10 #7
Вот тебе хороший пример, самый простой способ получения времени.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <time.h>
 
int main ()
{
  time_t seconds;
 
  seconds = time (NULL);
  printf ("%ld hours since January 1, 1970", seconds/3600);
  
  return 0;
}
upd1. ща, гляну я твою программулину.
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
15.02.2011, 18:17  [ТС] #8
Цитата Сообщение от zulkis Посмотреть сообщение
Вот тебе хороший пример, самый простой способ получения времени.
ща, гляну я твою программулину.
у меня там только каркас...

p/s/ я первый раз работаю с WinApi, 5ый с С++, так что не ругайте если что
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.02.2011, 18:21 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <Windows.h>
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main(int argc, char* argv[])
{
        WIN32_FIND_DATA wf;
        HANDLE FF;
        FILETIME gettime;
        SYSTEMTIME systime,yourfiletime;
        GetLocalTime(&systime);
        
 
        char dir[] = "D:/tasm//*.LST";
        FF = FindFirstFile(dir,&wf);
        gettime = wf.ftLastWriteTime;
        FileTimeToSystemTime(&gettime,&yourfiletime);
        cout << "system millisec:" <<systime.wMilliseconds << " File millisec: " << localsystemtime.wMilliseconds << endl;
 
         if (FF == INVALID_HANDLE_VALUE) 
   {
      cout << "FindFirstFile failed: " << GetLastError() << "\n";
   } 
   else 
   {
      cout << "The first file found is:" << wf.cFileName << "\n";
   }
        system("pause");
        
}
Разберешься ? сравнивай systemtime и yourfiletime.
Они являются структурами. Внутри - год\месяц\день\etc
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
15.02.2011, 18:27  [ТС] #10
Цитата Сообщение от zulkis Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <Windows.h>
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main(int argc, char* argv[])
{
        WIN32_FIND_DATA wf;
        HANDLE FF;
        FILETIME gettime;
        SYSTEMTIME systime,yourfiletime;
        GetLocalTime(&systime);
        
 
        char dir[] = "D:/tasm//*.LST";
        FF = FindFirstFile(dir,&wf);
        gettime = wf.ftLastWriteTime;
        FileTimeToSystemTime(&gettime,&yourfiletime);
         if (FF == INVALID_HANDLE_VALUE) 
   {
      cout << "FindFirstFile failed: " << GetLastError() << "\n";
   } 
   else 
   {
      cout << "The first file found is:" << wf.cFileName << "\n";
   }
        system("pause");
        
}
Разберешься ? сравнивай systemtime и yourfiletime.
Они являются структурами. Внутри - год\месяц\день\etc
вот! это то, что я хотел! Спасибо большое!)

Такой вопрос, допусти мне нужно вывести имя файла, если он последний раз редактировался до 14.7.2009, то мне нужно сравнивать по блоково? То есть, сначала год, потом месяц, потом день? и если условия выполняются, то выводить имя на экран? Я правильно рассуждаю?
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.02.2011, 18:31 #11
Ну да, вполне логично.
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
15.02.2011, 20:24  [ТС] #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// win_api.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
        WIN32_FIND_DATA wf;
        HANDLE FF;
        FILETIME gettime;
        SYSTEMTIME ft;
        int year = 2008, month = 9, day = 29;
                
 
        char dir[] = "D:/tasm//*.LST";
        FF = FindFirstFile(dir,&wf); 
        gettime = wf.ftLastWriteTime;
        FileTimeToSystemTime(&gettime,&ft);
 
        if (ft.wYear <= year) {
            if (ft.wYear < year) {
                cout << wf.cFileName << "\n";
            }
            if (ft.wMonth == month) {
                if (ft.wDay < day) {
                    cout << wf.cFileName << "\n";
                }
            }
            if (ft.wMonth < month) {
                cout << wf.cFileName << "\n";
            }
        }
        
        while (INVALID_HANDLE_VALUE) {
            FindNextFile(FF,&wf);
            gettime = wf.ftLastWriteTime;
            FileTimeToSystemTime(&gettime,&ft);
            if (ft.wYear <= year) {
                if (ft.wYear < year) {
                    cout << wf.cFileName << "\n";
                }
                if (ft.wMonth == month) {
                    if (ft.wDay < day) {
                        cout << wf.cFileName << "\n";
                    }
                }
                if (ft.wMonth < month) {
                    cout << wf.cFileName << "\n";
                }
            }
        }
 
        system("pause");
        
}
вродь сделал, но чет оно подвисает, гляньте где я камень словил, пожалуйста

Добавлено через 23 минуты
такс... нашел... ошибка с ифах... ща буду переделывать...

Добавлено через 9 минут
сделал...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// win_api.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
        WIN32_FIND_DATA wf;
        HANDLE FF;
        BOOL FN;
        FILETIME gettime;
        SYSTEMTIME ft;
        int year = 2012, month = 9, day = 29;
                
 
        char dir[] = "D:/tasm//*.LST";
        FF = FindFirstFile(dir,&wf);
        gettime = wf.ftLastWriteTime;
        FileTimeToSystemTime(&gettime,&ft);
        if (ft.wYear == year) {
            if (ft.wMonth == month) {
                if (ft.wDay < day) {
                    cout << wf.cFileName << "\n";
                }
            }
            if (ft.wMonth < month) {
                cout << wf.cFileName << "\n";
            }
        }
        if (ft.wYear < year) {
            cout << wf.cFileName << "\n";
        }
        FN = 1;
        while (FN!=0) {
            FN = FindNextFile(FF,&wf);
            gettime = wf.ftLastWriteTime;
            FileTimeToSystemTime(&gettime,&ft);
            if (ft.wYear == year) {
                if (ft.wMonth == month) {
                    if (ft.wDay < day) {
                        cout << wf.cFileName << "\n";
                    }
                }
                if (ft.wMonth < month) {
                    cout << wf.cFileName << "\n";
                }
            }
            if (ft.wYear < year) {
                cout << wf.cFileName << "\n";
            }
        }
        system("pause");
}
все бы хорошо, но последний файл дублируется... Скажите как исправить, пожалуйста

Добавлено через 41 минуту
подскажите как правильно cout заменить на WriteConsole() ?
Yandex
Объявления
15.02.2011, 20:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru