Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить существует каталог или нет 
:(
    Опции темы
korob2001
Дата 27.9.2004, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Всем привет!

Visual Basic изучаю совсем недавно, просто получилось так, что записался на курсы, по Java и VB ( отдельные курсы ). Заказал книги на русском языке, дабы не мучаться с нидерландским. Книги по Java пока не получил, а вот по VB уже есть. Вот и начал самостоятельно изучать VB, так как нидерландский язык знаю нормально, но не до такой степени что бы учить на нём новый для меня язык программирования, да и курсы эти один раз в неделю. По моему опыту этого недостаточно для хорошего знания языка программирования. Меня интересует не только корочка, которую я получу по окончании курсов, но и сами знания ( в первую очередь ).
Хожу на курсы, а дома учу самостоятельно то, что проходили на занятии, да и вперед уже маленько забежал ;). На курсах мы не дошли ещё до переменных, а самостоятельно уже изучаю работу с файлами.
Когда получу книги по Java, буду и с этим языком поступать также. Ну ладно, это уже лирика. Перейду к теме.

Проблема в следующем:
есть некая процедура, которая сначала создаёт каталог \Simple на диске C:\, затем в него складывает все необходимые файлы.
После первого запуска программы каталог успешно создаётся, но вот при последующих запусках выдаётся ошибка компиляции, точно не помню какая, я пишу не из дома. Но она указывает на строку, которая создаёт каталог \Simple, то есть на эту:
Код

MkDir ("C:\Simple")

Я конечно же понимаю почему - потому что данный каталог уже существует.
В общем мне необходима условная конструкция If, которая должна проверять каталог на несуществование, другими словами - если каталог C:\Simple не существует, то его нужно создать, в противном случае переходим к следующей строке после строки End If.
На Perl я бы сделал такую проверку так:
Код

if (!-e "C:/Simple") {
   # Создаём каталог
}

Переведу приведённый код на русский для тех, кто не знаком с Perl.
Если не существует ни файла, ни каталога с именем Simple на диске С:\ , то необходимо создать данный каталог.

Если я правильно понимаю, то мне необходима подобная проверка перед созданием каталога, на Visual Basic. Пробовал искать в книгах, но ничего не нашёл.

Подскажите: какое условие должно быть в конструкции If, что бы узнать, есть такой каталог или нет?

Заранее благодарен,
Денис


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
boevik
Дата 27.9.2004, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



На VB проверка на существования файла или каталога можно осуществить функцией Dir.
Код
if Len(Dir("C:/Simple")) = 0 then
' Создаём каталог
End IF



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
cardinal
Дата 27.9.2004, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Код
Private Sub Command1_Click()
Dim oFSO As New FileSystemObject
Dim Exists As Boolean

Exists = oFSO.FolderExists("c:\folder")

End Sub

то есть в If напиши
Код
...
If(oFSO.FolderExists("c:\folder")) Then...

Не забудь подключить scrrun.dll к проекту.



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
korob2001
Дата 27.9.2004, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Большое спасибо.
Сейчас отпринтую и пойду домой пробовать.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 28.9.2004, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



To cardinal
Не могу найти scrrun.dll sad.gif Подскажи пожалуйста как его подключить к проекту, потому что мне кажется это то, что нужно. Пробовал искать в списке, ой не помню как называется, но зато помню как вызывал его <Ctrl + T>. Но в нём его не нашёл, может нужно было в другом месте поискать?

To boevik
Такой код вроде подошёл, но затем возникла проблема.
Вобщем, тренировки ради написал такую прогу.
GUI:
5 текстовых полей, для ввода 5 имён txtName(1), txtName(2) ..... txtName(5)
5 текстовых полей, для ввода 5 фамилий txtFamily(1), txtFamily(2) ... txtFamily(5)
1 List box - lstMem для ввода данных из файла.
2 кнопки "Save to file" - cmdSave
"Exit" - cmdExit

Начальные параметры
Все текстовые поля пустые.

Код
Код

Private arrName(4) As String, arrFamily(4) As String
Private arrFullName(4) As String
Option Explicit

Private Sub cmdExit_Click()
       Unload frmMain
       End
End Sub

Private Sub cmdSave_Click()
       Dim intI As Integer
       Dim fileName As String, dirName As String
       fileName = "base.txt"
       dirName = "C:\Base"
       For intI = 0 To 4
           arrName(intI) = Trim(txtName(intI).Text)
           arrFamily(intI) = Trim(txtFamily(intI).Text)
           arrFullName(intI) = arrName(intI) & Space(1) & arrFamily(intI)
       Next
       Call saveToFile(fileName, dirName)
       For intI = 0 To 4
           txtName(intI).Text = ""
           txtFamily(intI).Text = ""
       Next
       Call showFromFile(fileName, dirName)
End Sub

Sub saveToFile(fileName As String, dirName As String)
   Dim numFile As Integer, intI As Integer, workDir As String
   workDir = CurDir
   If Len(Dir(dirName)) = 0 Then MkDir (dirName) ' Эта проверка работает
   ChDir (dirName)
   numFile = FreeFile
   Open fileName For Append As numFile
        For intI = 0 To 4
            Print #numFile, arrFullName(intI)
        Next
   Close numFile
   ChDir (workDir)
   MsgBox "All names successfuly saved in this file: " _
                & dirName & "\" & fileName
End Sub

Private Sub Form_Load()
       Dim fileName As String, dirName As String
       dirName = "C:\Base"
       fileName = "base.txt"
       Call showFromFile(fileName, dirName)
End Sub

Sub showFromFile(fileName As String, dirName As String)
   Dim numFile As Integer
   Dim workDir As String, strFromFile As String
   If Len(Dir(dirName)) <> 0 Then        ' А эта проверка не работает
      workDir = CurDir
      numFile = FreeFile
      ChDir (dirName)
      Open fileName For Input As numFile
           Do Until EOF(numFile)
              strFromFile = ""
              Line Input #numFile, strFromFile
              Trim (strFromFile)
              lstMem.AddItem strFromFile
           Loop
      Close (numFile)
      ChDir (workDir)
   End If
End Sub

Я конечно понимаю что вторая проверка в данном случае не уместна. Но я ведь только начал. Что знаю, то и поробую. Вобщем я пытаюсь, проверить существует каталог или нет для того, что бы не выводилась ошибка Path not found, при попытке открыть для чтения не существующий файл. В моём случае если существует каталог, то значит существует и файл. Можно конечно сделать проверку на существование файла, но я не знаю как.
Или может я не допонимаю сути этой строки:
Код

If Len(Dir(dirName)) <> 0 Then

Вот как я её понимаю:
Функция Len получает имя каталога из функции Dir, в то время функции Dir передаём путь к каталогу. В конечном итоге функция Len возвращает кол-во сиволов из которых состоит имя каталога. Если длина имени каталога не равна 0, значит каталог существует.

Может, я не совсем верно мыслю? Подправьте. Если не трудно, подскажите как проверить файл на существование. Так как если убрать это условие, то всё прекрастно работает.

Извините за ламерские вопросы, просто Visual Basic учу только вторую неделю.

Заранее благодарен за помощь и понимание. qstn.gif
Денис

Это сообщение отредактировал(а) korob2001 - 28.9.2004, 23:56


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
-Mikle-
Дата 29.9.2004, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 8
Всего: 59



Цитата(korob2001 @ 29.9.2004, 03:53)
If Len(Dir(dirName)) <> 0 Then        ' А эта проверка не работает

Цитата(korob2001 @ 29.9.2004, 03:53)
что бы не выводилась ошибка Path not found, при попытке открыть для чтения не существующий файл.

В данном случае она проверяет существование не файла, а каталога, но самого файла может и не быть... может в таком случае она у тебя не работает? т.е. когда каталог есть, а файла нет? в случае когда нужно проверить еще и существование файла, то ф-ии надо передать еще и его:
Код
if len(dir("c:\folder1\bbb.txt"))<>0 then
  ' выполнится если файл в указанном каталоге есть.
end if

я всегда так проверяю файлы smile.gif

Цитата(korob2001 @ 29.9.2004, 03:53)
Не могу найти scrrun.dll  Подскажи пожалуйста как его подключить к проекту, потому что мне кажется это то, что нужно. Пробовал искать в списке, ой не помню как называется, но зато помню как вызывал его <Ctrl + T>. Но в нём его не нашёл, может нужно было в другом месте поискать?

<Ctrl + T> - это список доступных компонентов
Тебе нужно в меню Project -> References... найти Microsoft Scripting Runtime и отметить его.

и еще, на данный момент это не важно, но все же позволь:
Код
sFullFileName = "c:\path1\path2\ttt.txt"  'полный путь к файлу
'ищем  слэш  начиная с конца, в переменной будет записано позиция символа
p = inStrRev(sFullFileName, "\")
sPath = left$(sFullFileName, p-1) 'берем слева строки p-1 символов
sFile = mid$(sFullFileName, p+1) 'берем из строки все символы до конца, начиная с символа p+1
это я к тому, чтоб как можно меньше параметров передавать ф-ии, хотя, в большинстве случаев разбивка на путь и имя_файла не требуется...

Цитата
Извините за ламерские вопросы, просто Visual Basic учу только вторую неделю.

Заходи, не стесняйся! Удачи! smile.gif

PS: Кстати, я наоборот, только начал изучать Perl smile.gif

Это сообщение отредактировал(а) -Mikle- - 29.9.2004, 08:05


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
cardinal
Дата 29.9.2004, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(korob2001 @ 28.9.2004, 22:53)
Извините за ламерские вопросы, просто Visual Basic учу только вторую неделю.

Если бы ты знал, что я несколько лет назад спрашивал (тут на форуме недавно увидел), то вообще ухахочишься... smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
korob2001
Дата 29.9.2004, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Все понял, а это куда важнее чем тупо копировать чужие труды. БОЛЬШОЕ СПАСИБО. smile.gif

Цитата

Кстати, я наоборот, только начал изучать Perl

Удачи тебе, я не пожалел что освол его. Может когда-нибудь тебе понадобится и моя помощь, с удовольствием помогу.
Цитата

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

Я с этим знаком, сейчас смотрю на свои первые вопросы по Perl и улыбаюсь. smile.gif

Еще раз всем спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.