Два вопроса у матроса :)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Два вопроса у матроса :)

Сообщение PUNK-GRUNGER » 09.09.2004 (Чт) 19:36

Два вопроса - у матроса:

Вопрос номер раз: Есть Windows XP, я и VB6.0. Задача тривиальна, но я уже не могу с ней бороться: как переименовывать файлы? В Me, 9x конструкция Name File1 As File2 работала просто замечательно... теперь, когда у меня XP - пишет о ошибке (permission denied). Самое интересное, что папки переименовывает, а вот файлы - нет.

Я подумал про привелигеи...

Гружусь под root'ом и таже фигня... Папки переименовывает, файлы нет. Пробовал FSO подключать (типа MoveFile), просто API MoveFile - ошибка и все...

Понимаю, что вина не в VB. В XP что-то? Кто-то может помочь?

Вопрос номер два: Написал алгоритм получения списка файлов и папок определенной директории. Типа обращаешься к функции с переменной "C:\Windows\" и она возвращает в ListBox'е все папки и все файлы (включая вложенные). Писал долго - надоело изрядно :) Самое интересное - написал... но... использовал DIR1 (погнался за легкостью...), а он, сволочь такая, не показывает скрытые папки (в отличии от File1.Hidden = True).

У кого-то есть готовый алгоритм показывания всех файлов\папок включая скрытые, системные и т.д. Желательно при использовании операнда DIR или на крайняк FSO :)

... какой я наглый... :)
P.S. Насчет матроса - это шутка такая :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.09.2004 (Чт) 19:41

Dir-у надо указать атрибут Hidden как параметр, и он всё покажет :-)
И не операнд это, а функция.
Изображение

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 09.09.2004 (Чт) 19:49

Я ж говорю... функция DIR скрытые папки покажет, а вот компонент DIR - фигушки :)
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Re: Два вопроса у матроса :)

Сообщение Юстас » 09.09.2004 (Чт) 20:51

Ну если ты такой наглый, то используй FindFirstFile, FindNextFile, FindClose, GetFileAttributes и будет у тебя красивая рекурсия. :)
И быстрее, чем с этим диром.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.09.2004 (Чт) 20:54

Про первый вопрос как-то забыли :)

Как человек, читавший Книжку (:P), ответственно заявляю...
Во-первых, у тебя NTFS.
Во-вторых, у переименовываемых файлов в ACL ты не указан :)

Ты должен при создании файла присобачить к нему такой ACL, в котором ты был бы с соотв. правами. Ты наверняка указываешь NULL, получаешь дефолтовый SECURITY_DESCRIPTOR, он же потом тебя и посылает.
Проблема создания хороших ACL велика и ужасна, потому кроме как в MSDN я тебя никуда не отправлю :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 09.09.2004 (Чт) 21:47

Начинаю искренне ненавидеть НТФС и вин икс пи :)
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 10.09.2004 (Пт) 6:27

PUNK-GRUNGER писал(а):Начинаю искренне ненавидеть НТФС...

Понимаю. :)
и вин икс пи :)

Не понимаю :)
Если уж стоит NTFS, то может стоит копировать а не переименовывать? Или это критично?
С уважением, Approximator.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 10.09.2004 (Пт) 8:37

Про список файлов:

Код: Выделить всё
Public Function DirFilterIN(DirName As String) As String
On Error Resume Next
If Mid$(DirName, Len(DirName), 1) = "\" Then
  DirFilterIN = Mid$(DirName, 1, Len(DirName) - 1)
Else
  DirFilterIN = DirName
End If
End Function

Public Function GetSubFolderFiles(ByVal folder As String, FilesArray() As String) As Long
Dim I As Long, ArrayF() As String, ArrayC As Long, S2 As String, cDir As Long, cSize As Long, S As String
ReDim ArrayF(1 To 1) As String
ArrayC = 1: cDir = 1
ArrayF(ArrayC) = DirFilterIN(folder) + "\"

GETFOLDERS:
folder = DirFilterIN(folder) + "\"
S = Dir(folder, vbDirectory Or vbArchive Or vbHidden Or vbNormal Or vbReadOnly Or vbSystem)
Do Until S = ""
  If Not StrComp(S, ".") = 0 And Not StrComp(S, "..") = 0 Then
    S2 = folder + S
    If (GetAttr(S2) And vbDirectory) = vbDirectory Then
      ArrayC = ArrayC + 1
      ReDim Preserve ArrayF(1 To ArrayC) As String
      ArrayF(ArrayC) = S2
    Else
      GetSubFolderFiles = GetSubFolderFiles + 1
      ReDim Preserve FilesArray(1 To GetSubFolderFiles) As String
      FilesArray(GetSubFolderFiles) = S2
    End If
  End If
  S = Dir
Loop

If cDir < ArrayC Then
  cDir = cDir + 1
  folder = ArrayF(cDir)
  GoTo GETFOLDERS
End If
End Function
Программисты не глючат - глючат компиляторы...

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 10.09.2004 (Пт) 8:43

Про NTFS и WinXP.
Странная проблема, я только что в WinXP на NTFS переименовал файл Name ... as ... и никаких проблем не было.
Программисты не глючат - глючат компиляторы...

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 10.09.2004 (Пт) 8:59

COdeName - пасиба балшое за код. Умнее и быстрее, чем у меня воркает :)
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.09.2004 (Пт) 10:43

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

Так что по первому вопросу советую посмотреть права на папку, внутри которой ты переименовываешь файлы. Возможно там имеется какое-нибудь жуткое наследование, которое закрывает доступ владельцу.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList