Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Системная папка или нет? Добавлено: 22.11.06 20:53  

Автор вопроса:  Боцман | Web-сайт: Rus-Skipper.narod.ru | ICQ: 295725312 
Вопрос такой есть программа которая перемещает папки
при этом может возникнуть ситуация когда пользователь
спрячет папку ( Мои документы или подобное).
Как запретить программе перемещение системных папок?

Ответить

  Ответы Всего ответов: 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-сайт: Rus-Skipper.narod.ru
 Профиль | | #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
вот эту строку выкинь
dw = dw And (FILE_ATTRIBUTE_DIRECTORY Or FILE_ATTRIBUTE_SYSTEM)

Ответить

Номер ответа: 4
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #4
Добавлено: 23.11.06 10:54
вот эту строку выкинь

dw = dw And (FILE_ATTRIBUTE_DIRECTORY Or FILE_ATTRIBUTE_SYSTEM)
выкинул ну и что?
всеравно
MsgBox "Караул !!! системные папки двигают !!!"

Ответить

Номер ответа: 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-сайт: Rus-Skipper.narod.ru
 Профиль | | #7
Добавлено: 27.11.06 12:07
Всем писавшим мои извенения за не ответы,
был в отъезде трое суток. Сейчас все посмотрю еще раз спасибо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам