Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 5.00
KostyaKulakov
Заблокирован
#1

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

06.08.2012, 11:31. Просмотров 4223. Ответов 8
Метки нет (Все метки)

в чём ошибка?
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2012, 11:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Атрибуты файла (C++):

можно ли менять атрибуты файла? - C++
Вот примерно так пробую, но чтото не получается. Поэтому возник вопрос-можно ли их вообще менять? Если можно, то подскажите где туплю?) ...

Атрибуты консоли в C++ - C++
С++ Win32 Console Application. Компилятор - Microsoft Visual Studio C++ 2005 Как при компилировании задать параметр для консоли,...

Атрибуты для директории - C++
Всем доброго времени суток помогите мне разобратся как создавать папки/файлы с атрибутами? там скрытый, ну в таком смысле. Создаю папку при...

Размер файлов и папок. Их атрибуты - C++
Как получить размер файла и его атрибут? SYSTEMTIME time;//Время(?) WIN32_FIND_DATA FindFileData;//? HANDLE hf = FindFirstFile(str,...

Атрибуты прав при создании директории - C++
Пишу mkdir(&quot;dir0777&quot;,0777); mkdir(&quot;dir0770&quot;,0770); mkdir(&quot;dir0707&quot;,0707); mkdir(&quot;dir0077&quot;,0077); Для владельца - права...

Определите класс, который должен содержать атрибуты - C++
Здравствуйте уважаемые любители и ценители языка С++! У меня к вам огромная просьба. На днях нужно сдать контрольную работу по предмету...

8
alsav22
5431 / 4826 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2012, 11:34 #2
А что не работает?
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
06.08.2012, 11:36 #3
Может стоит логическое И заменить сравнением на равенство?
0
KostyaKulakov
Заблокирован
06.08.2012, 11:45  [ТС] #4
Цитата Сообщение от kazak Посмотреть сообщение
Может стоит логическое И заменить сравнением на равенство?
попробуй у себя код скомплить и посмотри как он будет себя вести

Добавлено через 4 минуты
проблема в том то что он не может комбинировать. он выдаёт только 1 параметр. если их больше 2 то фейл
0
-=ЮрА=-
Заблокирован
Автор FAQ
06.08.2012, 11:48 #5
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
findData.dwFileAttributes && FILE_ATTRIBUTE_HIDDEN
- надо побитовое а не логическое И (убери второй крючок &)
1
alsav22
5431 / 4826 / 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 Посмотреть сообщение
проблема в том то что он не может комбинировать.
Всё он комбинирует.
0
-=ЮрА=-
Заблокирован
Автор 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 и константы файлового атрибута
1
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;
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
06.08.2012, 12:09 #9
KostyaKulakov, ещё могу посоветовать функцию GetFileAttrributes (вдруг о ней ещё не знаешь) чтобы всяк раз когда для файла хотим найти атрибут не применять FindFirst(Next)File,
http://vsokovikov.narod.ru/New_MSDN_...attributes.htm
1
06.08.2012, 12:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2012, 12:09
Привет! Вот еще темы с ответами:

Написать код для флага РФ, используя только атрибуты - C++
Здравствуйте!!! Помогите пожалуйста, нужно написать код для флага РФ используя только атрибуты. Заранее благодарю...

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

Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты - C++
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты.

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. - C++
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.


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

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

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