Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
10 / 8 / 2
Регистрация: 18.05.2019
Сообщений: 388
1

Ошибка вывода или ввода массива символов из массива структур

03.11.2019, 18:01. Показов 511. Ответов 5
Метки нет (Все метки)

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#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;
    LONGLONG fileSize;  
    FILETIME fileTimeCreate;
};
 
int main()
{
    HANDLE hFind;
    wchar_t  filePath[MAX_PATH];
    WIN32_FIND_DATAW wfd;
    //FILETIME ft;
    SYSTEMTIME st;
    int sizeArrfile=0;
    int index=0;
    
    /*GetCurrentDirectoryW(sizeof(filePath),filePath);
    std::wcout << filePath <<std::endl;*/
    SetCurrentDirectoryW(L"\\\\?\\C:\\");
    GetCurrentDirectoryW(sizeof(filePath),filePath);
 
    wcscat(filePath, L"*.*");
 
    hFind = FindFirstFileW(filePath, &wfd);
    setlocale(LC_ALL, "");
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
        sizeArrfile++;
        } while (NULL != FindNextFileW(hFind, &wfd));   
        FindClose(hFind);
    }
 
    file *fileArray = new file[sizeArrfile];    
    
    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);
 
        int i=0;
        while(i<index)
        {
            std::wcout << fileArray[i].filePathName[0] << "  ";  //  или ошибка здесь.
 
            if( fileArray[i].fileAttribute & FILE_ATTRIBUTE_DIRECTORY)
             std::wcout << "<katalog>  ";
            else
             std::wcout <<  "size file:  " << fileArray[i].fileSize;
 
            FileTimeToSystemTime(&fileArray[i].fileTimeCreate, &st);
            printf("created on: %02d.%02d.%d %02d:%02d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute);
 
            std::wcout << std::endl;
            i++;
        }
        delete [] fileArray;
 
    _getch();
    return 0;
}
скрин.
Ошибка вывода или ввода массива символов из массива структур


выдает только первую букву имени файла.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2019, 18:01
Ответы с готовыми решениями:

Функции ввода/вывода двумерного массива - Тип элементов массива неполный
Доброго времени суток! // Автоматический ввод двумерного массива void Gets2ArrayRand(int** A,...

Форма для ввода-вывода массива одномерного массива
Организуйте в Windows приложении ввод и вывод одномерного массива строкового типа.

Написать процедуру ввода массива и вывода массива
Написать процедуру ввода массива и вывода массива.

Разработайте программу ввода элементов массива по столбцам и вывода элементов массива в виде матрицы на экран
14,Разработайте программу ввода элементов массива по столбцам и вывода элементов массива в виде...

5
10 / 8 / 2
Регистрация: 18.05.2019
Сообщений: 388
03.11.2019, 19:14  [ТС] 2
Уважаемые модераторы, прошу переместить мою тему в C++:WinAPI.
По ошибке создал тему не в том разделе.

Добавлено через 1 час 3 минуты
Решение.

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#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];
    int fileAttribute;
    LONGLONG fileSize;  
    FILETIME fileTimeCreate;
};
 
int main()
{
    HANDLE hFind;
    wchar_t  filePath[MAX_PATH];
    WIN32_FIND_DATAW wfd;
    //FILETIME ft;
    SYSTEMTIME st;
    int sizeArrfile=0;
    int index=0;
    
    /*GetCurrentDirectoryW(sizeof(filePath),filePath);
    std::wcout << filePath <<std::endl;*/
    SetCurrentDirectoryW(L"\\\\?\\C:\\");
    GetCurrentDirectoryW(sizeof(filePath),filePath);
 
    wcscat(filePath, L"*.*");
 
    hFind = FindFirstFileW(filePath, &wfd);
    setlocale(LC_ALL, "");
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            sizeArrfile++;
        } while (NULL != FindNextFileW(hFind, &wfd));
        FindClose(hFind);
    }
 
    file *fileArray = new file[sizeArrfile];    
    
    hFind = FindFirstFileW(filePath, &wfd);
    //setlocale(LC_ALL, "");
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            wcscpy( &fileArray[index].filePathName[0], &wfd.cFileName[0]);     // здесь wcscpy();
 
            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);
 
            int i=0;
            while(i<index)
            {
                std::wcout << fileArray[i].filePathName << "  ";     // здесь filePathName[0] заменить на filePathName
 
                if( fileArray[i].fileAttribute & FILE_ATTRIBUTE_DIRECTORY)
                    std::wcout << "<katalog>  ";
                else
                    std::wcout <<  "size file:  " << fileArray[i].fileSize << "  ";
 
                FileTimeToSystemTime(&fileArray[i].fileTimeCreate, &st);
                printf("created on: %02d.%02d.%d %02d:%02d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute);
 
                std::wcout << std::endl;
                i++;
            }
            delete [] fileArray;
 
    _getch();
    return 0;
}
0
бах-бах и в продакшен!
2622 / 1383 / 487
Регистрация: 23.09.2014
Сообщений: 4,229
Записей в блоге: 4
03.11.2019, 19:18 3
DenAlpetyan,
уберите квадратные скобки. чтобы было так:
C++
79
std::wcout << fileArray[i].filePathName << "  ";  //  или ошибка здесь.
0
10 / 8 / 2
Регистрация: 18.05.2019
Сообщений: 388
03.11.2019, 19:20  [ТС] 4
XLAT, я уже заметил.
0
бах-бах и в продакшен!
2622 / 1383 / 487
Регистрация: 23.09.2014
Сообщений: 4,229
Записей в блоге: 4
03.11.2019, 19:25 5
если wchar_t text[n] строка, то чтобы вывести её на экран нужно так:
std::wcout << text;

отдельный символ строки выводится так:
std::wcout << text[i];

что у вас и наблюдается в коде.

Добавлено через 1 минуту
Цитата Сообщение от DenAlpetyan Посмотреть сообщение
я уже заметил.
извините, я тоже тока заметил, что вы заметили.
0
10 / 8 / 2
Регистрация: 18.05.2019
Сообщений: 388
03.11.2019, 19:45  [ТС] 6
XLAT, ничего, спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2019, 19:45

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Оформить программу с помощью процедуры ввода массива и процедуры вывода массива на экран.
Program Primer1; uses crt; var a: array of integer; i: integer; Begin clrscr; for i:=1 to...

Ошибка CS1586 При создании массива следует указать размер массива или инициализатор массива
Не понимаю в чём ошибка. Ошибка CS1586 При создании массива следует указать размер массива или...

Сортировка массива. Ошибка вывода отсортированного массива
Задание: В произвольной матрице отсортировать по убыванию элементы последовательности,...

Функции ввода и вывода массива
Помогите Хочу сделать ввод и вывод используя функций Не компилируется( #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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