Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851

Как передать значение FILETIME из WIN32_FIND_DATAW в long int?

03.11.2019, 14:10. Показов 1214. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как передать значение FILETIME из WIN32_FIND_DATAW,
в элемент структуры например long int или LONGLONG ?

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
60
61
62
63
#define _CRT_SECURE_NO_WARNINGS
 
#define _UNICODE
// тестовая программа.
#include <iostream>
#include <conio.h>
//#include <tchar.h>
#include <stdio.h>
//#include <locale.h>
#include <windows.h>
 
struct file
{
    WCHAR filePathName[MAX_PATH];
    int fileAttribute;
    long int fileSize;  
    long int fileTimeCreate;
};
 
int main()
{
    wchar_t filePath[32767];
    int index=0;
    file fileArray[65534];
    
    //FILETIME ft;
    SYSTEMTIME st;
 
    /*GetCurrentDirectoryW(sizeof(filePath),filePath);
    std::wcout << filePath <<std::endl;*/
    SetCurrentDirectoryW(L"\\\\?\\C:\\");
    GetCurrentDirectoryW(sizeof(filePath),filePath);
 
    wcscat(filePath, L"*.*");
 
    WIN32_FIND_DATAW wfd;
 
    HANDLE hFind;
    hFind = FindFirstFileW(filePath, &wfd);
    //setlocale(LC_ALL, "");
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
                fileArray[index].filePathName[0]=wfd.cFileName[0];
 
                fileArray[index].fileAttribute=wfd.dwFileAttributes;
 
                LONGLONG nFileLen = 0;
                nFileLen = (wfd.nFileSizeHigh * (MAXDWORD+1)) + wfd.nFileSizeLow;
                fileArray[index].fileSize=nFileLen;
    
                fileArray[index].fileTimeCreate=&wfd.ftCreationTime;         // здесь вопрос.
 
                index++;
 
        } while (NULL != FindNextFileW(hFind, &wfd));
                   FindClose(hFind);
    }
    _getch();
    return 0;
}
fileArray[index].fileTimeCreate=&wfd.ftCreationTime; так не работает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2019, 14:10
Ответы с готовыми решениями:

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p и возвращает ap. Помогите...

Как процессор работает с long long int ?
На моей системе (WinXP SP3 32bit) sizeof(long long int); возвращает 8. 8 Байт. Это 64 бита. Как процессор работает с такой переменной, если...

Как передать функции значение int?
Пытаюсь передать функции значение int, но не получается. Синтаксически все правильно, но не компилируется. Как сделать так, шоб работало,...

6
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
03.11.2019, 14:56
определи структуру вот так

C++
1
2
3
4
5
6
7
struct file
{
    WCHAR filePathName[MAX_PATH]{};
    int fileAttribute{};
    long int fileSize{};  
    FILETIME fileTimeCreate{};
};
0
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851
03.11.2019, 15:02  [ТС]
Алексей1153,

IntelliSense: отсутствует оператор "=", соответствующий этим операндам
типы операндов: FILETIME = FILETIME *
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
03.11.2019, 15:04
DenAlpetyan, а зачем адрес берёшь? Копируй так

C++
1
fileArray[index].fileTimeCreate=wfd.ftCreationTime;
0
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851
03.11.2019, 15:16  [ТС]
Алексей1153, получилось, спасибо.

но проблема в том что программа, забыл написать , вообще не работает.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#define _CRT_SECURE_NO_WARNINGS
 
#define _UNICODE
// тестовая программа.
#include <iostream>
#include <conio.h>
//#include <tchar.h>
//#include <stdio.h>
//#include <locale.h>
#include <windows.h>
 
struct file
{
    wchar_t filePathName[MAX_PATH];
    DWORD fileAttribute;
    LONGLONG fileSize;  
    FILETIME fileTimeCreate;
};
 
int main()
{
    wchar_t filePath[32767];
    int index=0;
    file fileArray[65534];
    
    //FILETIME ft;
    //SYSTEMTIME st;
 
    /*GetCurrentDirectoryW(sizeof(filePath),filePath);
    std::wcout << filePath <<std::endl;*/
    SetCurrentDirectoryW(L"\\\\?\\C:\\");
    GetCurrentDirectoryW(sizeof(filePath),filePath);
 
    wcscat(filePath, L"*.*");
    WIN32_FIND_DATAW wfd;
 
    HANDLE hFind;
    hFind = FindFirstFileW(filePath, &wfd);
    //setlocale(LC_ALL, "");
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            //std::wcout << &wfd.cFileName[0] << "  ";
            fileArray[index].filePathName[0]=wfd.cFileName[0];
            //if( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                fileArray[index].fileAttribute=wfd.dwFileAttributes;
                //std::wcout << "<katalog>  " << "     ";
 
                LONGLONG nFileLen = 0;
                //if (hFind != INVALID_HANDLE_VALUE)
                {
                nFileLen = (wfd.nFileSizeHigh * (MAXDWORD+1)) + wfd.nFileSizeLow;
                fileArray[index].fileSize=nFileLen;
                //std::wcout << "size:  " << nFileLen << "    ";
                }
    
                fileArray[index].fileTimeCreate=wfd.ftCreationTime;
                /*FileTimeToSystemTime(&wfd.ftCreationTime, &st);
                printf("created on: %02d.%02d.%d %02d:%02d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute);
 
                std::wcout << std::endl;*/
                index++;
        } while (NULL != FindNextFileW(hFind, &wfd));
                FindClose(hFind);
 
                int i=0;
                while(i<index+1)
                {
                std::wcout << fileArray[i].filePathName[0] << "  ";
                    if( fileArray[i].fileAttribute & FILE_ATTRIBUTE_DIRECTORY)
                        std::wcout << "<katalog>  ";
                    std::wcout <<  "size file;  " << fileArray[i].fileSize;
                    std::wcout << std::endl;
                    i++;
                }
    }
    _getch();
    return 0;
}
ошибка и вылет при компиляции.

Необработанное исключение по адресу 0x000000013F037487 в workinFile.exe: 0xC00000FD: Stack overflow (параметры: 0x0000000000000001, 0x00000000001F3000).

в построении решения ошибок нет.
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,144
03.11.2019, 15:23
Цитата Сообщение от DenAlpetyan Посмотреть сообщение
программа, забыл написать , вообще не работает
да, совсем ерунда, зачем про такое вспоминать

Stack overflow
я скажу причину - огромные статические массивы на стеке
C++
1
2
    wchar_t filePath[32767];
    file fileArray[65534];
сделай динамические массивы или векторы std::vector

Добавлено через 1 минуту
и инициализацию в структуре file всё же не игнорируй
1
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851
03.11.2019, 17:25  [ТС]
Алексей1153, опять помог, спасибо.

хотя про массивы догадывался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2019, 17:25
Помогаю со студенческими работами здесь

Надо указателю на long int присвоить значение указателя на char
//есть указатель unsigned char* p_to_char = somthing; //и указатель unsigned long int* p_to_int; //надо p_to_int присвоить...

Не умещается значение = 4млрд, в переменной типа unsigned long int
Всем привет. В Си я новичек. Пользуюсь VS6. Написал вот это: #include &lt;stdio.h&gt; main() { unsigned long int i; i =...

Использование long вместо long int. Возможны ли подводные камни?
Добрый день. Моя цель - писать кроссплатформенный C++ код, поэтому хочу отказаться от типа int (т.к. он непостоянный в разных...

Вызвано исключение при инициализации массива long long int
long long int c = {}; Если убрать один long, программа запускается и работает нормально. Почему?

Сдвинуть значение целочисленной величины (типа long int) на n бит вправо
Помогите кто-нибудь. Нужно написать архитектурно независимую функцию позволяющую циклически(!) сдвинуть значение целочисленной величины...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru