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

Атрибуты файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 5.00
KostyaKulakov
Заблокирован
06.08.2012, 11:31     Атрибуты файла #1
в чём ошибка?
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
#include <iostream>
#include <Windows.h>
#include <io.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    WIN32_FIND_DATAA findData;
    HANDLE hFile = FindFirstFileA("G:/23/1/1.txt", &findData);
 
    if (hFile == INVALID_HANDLE_VALUE)
    {
        cout << "There are problems with the file" << endl;
        return -1;
        exit(1);
    }
    else
    {
        cout << "Фаил: ";
        if (findData.dwFileAttributes && FILE_ATTRIBUTE_HIDDEN)
        {
        cout << "Скрытый ";
        }
        if (findData.dwFileAttributes && FILE_ATTRIBUTE_SYSTEM)
        {
        cout << "Системный ";
        }
        if (findData.dwFileAttributes && FILE_ATTRIBUTE_ARCHIVE)
        {
        cout << "Архивный ";
        }
        if (findData.dwFileAttributes && FILE_ATTRIBUTE_COMPRESSED)
        {
            cout << "Сжатый";
        }
    }   
 
    cout << endl << endl;
 
 
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2012, 11:34     Атрибуты файла #2
А что не работает?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
06.08.2012, 11:36     Атрибуты файла #3
Может стоит логическое И заменить сравнением на равенство?
KostyaKulakov
Заблокирован
06.08.2012, 11:45  [ТС]     Атрибуты файла #4
Цитата Сообщение от kazak Посмотреть сообщение
Может стоит логическое И заменить сравнением на равенство?
попробуй у себя код скомплить и посмотри как он будет себя вести

Добавлено через 4 минуты
проблема в том то что он не может комбинировать. он выдаёт только 1 параметр. если их больше 2 то фейл
-=ЮрА=-
Заблокирован
Автор FAQ
06.08.2012, 11:48     Атрибуты файла #5
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
findData.dwFileAttributes && FILE_ATTRIBUTE_HIDDEN
- надо побитовое а не логическое И (убери второй крючок &)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2012, 11:52     Атрибуты файла #6
А если так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.....................................
cout << "Фаил: ";
        if ( findData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
        {
        cout << "Скрытый ";
        }
        if (findData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
        {
        cout << "Системный ";
        }
        if (findData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
        {
        cout << "Архивный ";
        }
        if (findData.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED)
        {
            cout << "Сжатый";
        }
.................................
Добавлено через 1 минуту
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
проблема в том то что он не может комбинировать.
Всё он комбинирует.
-=ЮрА=-
Заблокирован
Автор FAQ
06.08.2012, 12:03     Атрибуты файла #7
KostyaKulakov, я вижу ты внял моему совету - это хорошо а теперь поясню на пальцах почему надо было побитовое а не логическое И
Смотри вот константы FILE_ATTRIBUTE
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#define FILE_ATTRIBUTE_READONLY             0x00000001  
#define FILE_ATTRIBUTE_HIDDEN               0x00000002  
#define FILE_ATTRIBUTE_SYSTEM               0x00000004  
#define FILE_ATTRIBUTE_DIRECTORY            0x00000010  
#define FILE_ATTRIBUTE_ARCHIVE              0x00000020  
#define FILE_ATTRIBUTE_ENCRYPTED            0x00000040  
#define FILE_ATTRIBUTE_NORMAL               0x00000080  
#define FILE_ATTRIBUTE_TEMPORARY            0x00000100  
#define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200  
#define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400  
#define FILE_ATTRIBUTE_COMPRESSED           0x00000800  
#define FILE_ATTRIBUTE_OFFLINE              0x00001000  
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000
Т.е это числа от 0x00000001 до 0x00002000 т.е все числа не равны 0. Теперь смотри логику алгоритма для логического И
if(dwFileAttributes И 0x00000001) т.е. всегда отрабатывающее условие(конечно если dwFileAttributes != 0) таким образом програмка должна была печатать на все файлы cout << "Скрытый ";
Что же делает побитовое И - фактически аналогичную операцию как и сравнение ==
т.е логика становиться уже такой if(dwFileAttributes == 0x00000001) - вот тут уже полноценное сравнение dwFileAttributes и константы файлового атрибута
KostyaKulakov
Заблокирован
06.08.2012, 12:05  [ТС]     Атрибуты файла #8
всем спасибо.
отдельное спасибо -=ЮрА=-

Добавлено через 1 минуту
может кому пригодится. вот вариант решения
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
#include <iostream>
#include <Windows.h>
#include <io.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    WIN32_FIND_DATAA findData;
    HANDLE hFile = FindFirstFileA("G:/23/1", &findData);
 
 
    if (hFile == INVALID_HANDLE_VALUE)
    {
        cout << "There are problems with the file" << endl;
        return -1;
        exit(1);
    }
        else
        {
            if (findData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
                cout << "Скрытый ";
 
            if (findData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
                cout << "Системный ";
 
            if (findData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
                cout << "Архивный ";
 
            if (findData.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED)
                cout << "Сжатый";
 
            if(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                cout << "Является директоией" << endl;
        }   
    cout << endl << endl;
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2012, 12:09     Атрибуты файла
Еще ссылки по теме:

C++ Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
Написать код для флага РФ, используя только атрибуты C++
C++ можно ли менять атрибуты файла?

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
06.08.2012, 12:09     Атрибуты файла #9
KostyaKulakov, ещё могу посоветовать функцию GetFileAttrributes (вдруг о ней ещё не знаешь) чтобы всяк раз когда для файла хотим найти атрибут не применять FindFirst(Next)File,
http://vsokovikov.narod.ru/New_MSDN_...attributes.htm
Yandex
Объявления
06.08.2012, 12:09     Атрибуты файла
Ответ Создать тему
Опции темы

Текущее время: 00:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru