Страница: 1 |
Страница: 1 |
Вопрос: Системная папка или нет?
Добавлено: 22.11.06 20:53
Автор вопроса: Боцман | Web-сайт:
Вопрос такой есть программа которая перемещает папки
при этом может возникнуть ситуация когда пользователь
спрячет папку ( Мои документы или подобное).
Как запретить программе перемещение системных папок?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
JMP
Вопросов: 6
Ответов: 171
Профиль | | #1
Добавлено: 22.11.06 22:41
'API-GetFileAttributes
LOCAL dw AS DWORD
LOCAL sz AS ASCIIZ *%MAX_PATH
sz="abcd\dirs" ' < здесь директория(и)
dw=GetFileAttributes(sz)
dw=dw AND (%FILE_ATTRIBUTE_DIRECTORY OR %FILE_ATTRIBUTE_SYSTEM)
IF ((dw AND %FILE_ATTRIBUTE_DIRECTORY)=%FILE_ATTRIBUTE_DIRECTORY) _
AND ((dw AND %FILE_ATTRIBUTE_SYSTEM)=%FILE_ATTRIBUTE_SYSTEM) THEN
MSGBOX "Караул !!! системные папки двигают !!!"
END IF
Номер ответа: 2
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #2
Добавлено: 23.11.06 09:06
VB6 из описания
'Функция GetFileAttributes
Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Возвращаемое значение
GetFileAttributes возвращает атрибуты файла или папки. При ошибке возвращает 0, если файл или папка не найдены, то возвращается -1. В других случаях возвращаемое значение принимает следующие флаги:
FILE_ATTRIBUTE_ARCHIVE = &H20
Архивный файл
FILE_ATTRIBUTE_COMPRESSED = &H800
Сжатый файл
FILE_ATTRIBUTE_DIRECTORY = &H10
Имя папки
FILE_ATTRIBUTE_HIDDEN = &H2
Скрытый файл или папка.Обычно его не видно пользователю
FILE_ATTRIBUTE_NORMAL = &H80
Файл не имеет атрибутов(нельзя комбинировать с другими флагами)
FILE_ATTRIBUTE_READONLY = &H1
Файл только для чтения
FILE_ATTRIBUTE_SYSTEM = &H4
Системный файл. Является частью операционной системы
Это то от чего я отталкиваюсь
' в модуле
Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
'в коде
Private Sub Form_Load()
Dim dw As Long
Dim sz As String
Dim FILE_ATTRIBUTE_SYSTEM As Long
Dim FILE_ATTRIBUTE_DIRECTORY As Long
sz = "C:\Working" ' < здесь директория(и)
dw = GetFileAttributes(sz)
dw = dw And (FILE_ATTRIBUTE_DIRECTORY Or FILE_ATTRIBUTE_SYSTEM)
If ((dw And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) And ((dw And FILE_ATTRIBUTE_SYSTEM) = FILE_ATTRIBUTE_SYSTEM) Then
MsgBox "Караул !!! системные папки двигают !!!"
End If
End Sub
Где ошибка папка простая распознается как системная
Номер ответа: 3
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #3
Добавлено: 23.11.06 10:34
вот эту строку выкинь
Номер ответа: 4
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #4
Добавлено: 23.11.06 10:54
вот эту строку выкинь
dw = dw And (FILE_ATTRIBUTE_DIRECTORY Or FILE_ATTRIBUTE_SYSTEM)
выкинул ну и что?
всеравно
Номер ответа: 5
Автор ответа:
JMP
Вопросов: 6
Ответов: 171
Профиль | | #5
Добавлено: 23.11.06 19:23
dw = dw And (FILE_ATTRIBUTE_DIRECTORY Or FILE_ATTRIBUTE_SYSTEM)
Не надо выкидывать, АПИ возвращает все флаги, а нам надо обрабатывать только системный и директорию флаги.
На ПБ пашет нормально, меняю атрибуты у папки и програма реагирует тоже нормально.
Единственное отличие между моим кодом и вашим: в функцию надо передавать адрес нуль терминайтед строки.
Т.е надо
sz = "C:\Working" + CHR$(0)
и передавать ByRef
Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByRef lpFileName As String) As Long
Номер ответа: 6
Автор ответа:
JMP
Вопросов: 6
Ответов: 171
Профиль | | #6
Добавлено: 23.11.06 22:52
P.S.
Dim FILE_ATTRIBUTE_SYSTEM As Long
Dim FILE_ATTRIBUTE_DIRECTORY As Long
Это переменные а мы должны обрабатывать константы
CONSTANT FILE_ATTRIBUTE_DIRECTORY = &H10
CONSTANT FILE_ATTRIBUTE_SYSTEM = &H4
Номер ответа: 7
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #7
Добавлено: 27.11.06 12:07
Всем писавшим мои извенения за не ответы,
был в отъезде трое суток. Сейчас все посмотрю еще раз спасибо.