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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка корректности имени файла, в скрипте VBS 
V
    Опции темы
mihanik
Дата 13.3.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Привет всем.

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

Предполагаю так

1. Проверить есть ли файл с таким именем на диске. Если есть, то имя файла введено правильно.
2. Если файла с таким именем нет, то попытаться создать такой файл.
3. Попытка создания увенчалась успехом? Если да, то имя правильное. Проверочный файл стереть.
4. Если создать файл не удалось, то что-то тут не правильно.
(или имя файла, или пытались записать на устройство, на которое писАть нельзя).

Вот такой вот алгоритм.

Вопрос.
Можно ли проще?


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
coderx
Дата 13.3.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.9.2005

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



Используй On Error Resume Next:

Код

On Error Resume Next
Open For Input As#1: Close #1
If Err Then Этот файл не имеется
Err = 0
Open For Output As#1: Close #1
If Err Then Невозможно создать файл

PM MAIL   Вверх
mihanik
Дата 13.3.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Тоже вариант...

Добавлено @ 17:05 
Только тут одна тонкость...

Цитата(mihanik @  13.3.2007,  09:39 Найти цитируемый пост)
Предполагается, что это имя файла в который будет производиться запись.


Не факт, что записывать что-то будут...
А при твоём способе если существует файл с таким же именем, то он сотрётся...
Этого быть не должно...




--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
coderx
Дата 13.3.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.9.2005

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



Цитата(mihanik @  13.3.2007,  17:03 Найти цитируемый пост)
А при твоём способе если существует файл с таким же именем, то он сотрётся...Этого быть не должно...

On Error Resume Next
Код

Open For Input As#1: Close #1
If Err Then ' Этот файл не имеется
Err = 0
Open For Append As#1: Close #1
If Err Then ' Невозможно создать файл


Метод Append по-моему не сотрёт.

Добавлено @ 17:23 
И вообщём после второй строки кода можешь спросить вроде такой: Заменить существующий файл, если нет предложить ввести другого названия ...
PM MAIL   Вверх
Akina
Дата 14.3.2007, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Имя файла (длинное) корректно, если оно:
  • не содержит недопустимых символов
  • не начинается с точки
  • не превышавет допустимую длину
Первое проверяется тупым RegExp. Или Not Like %[список недопустимых символов]% ... 
Остальное и вовсе тривиально. Так что трясти файловую систему не обязательно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 14.3.2007, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Цитата(Akina @  14.3.2007,  00:36 Найти цитируемый пост)
Так что трясти файловую систему не обязательно. 


Абсолютно согласен!!!

Я решил использовать CommonDialog в своём скрипте

Что-то типа этого получается...

Код

   Dim fso

   Set fso = CreateObject("MSComDlg.CommonDialog")
   ' дальше можем работать, как в стандартном VB
   fso.MaxFileSize = 255
   fso.ShowSave()
   ...
   msgbox fso.FileName



Добавлено @ 08:38 
А уж этот диалог сам может всё проверить...
 smile 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
mihanik
Дата 14.3.2007, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Вот, что у меня получилось (черновик)...

Код

' Open & Save Dialog
Const cdlOFNAllowMultiselect = &H200
Const cdlOFNCreatePrompt = &H2000
Const cdlOFNExplorer = &H80000
Const cdlOFNExtensionDifferent = &H400
Const cdlOFNFileMustExist = &H1000
Const cdlOFNHelpButton = &H10
Const cdlOFNHideReadOnly = &H4
Const cdlOFNLongNames = &H200000
Const cdlOFNNoChangeDir = &H8
Const cdlOFNNoDereferenceLinks = &H100000
Const cdlOFNNoLongNames = &H40000
Const cdlOFNNoReadOnlyReturn = &H8000
Const cdlOFNNoValidate = &H100
Const cdlOFNOverwritePrompt = &H2
Const cdlOFNPathMustExist = &H800
Const cdlOFNReadOnly = &H1
Const cdlOFNShareAware = &H4000

'********************************************************************                             
'*                                                                                                
'* Функция   CommonDialog (ByVal Action, ByVal DefaultExt, ByVal Filter, _                        
'*                         ByVal FilterIndex, ByVal FileName, ByVal InitDir, _                    
'*                         ByVal MaxFileSize, ByVal Flags)
'* Описание: Аналог CommonDialog в VB6                                                            
'* Вход    : Набор параметров как для CommonDialog в VB6                                          
'* Выход   : Имя файла                                                                            
'*                                                                                                
'********************************************************************                             
Function CommonDialog (ByVal Action, ByVal DefaultExt, ByVal Filter, _                            
                       ByVal FilterIndex, ByVal FileName, ByVal InitDir, _                        
                       ByVal MaxFileSize, ByVal Flags)
On Error Resume Next                                                                              
                                                                                                  
Dim CDialog                                                                                       

' Установим свойства CommonDialog, полученные при вызове функции
    Set CDialog = CreateObject( "MSComDlg.CommonDialog" )

        ' пусть возникает ошибка при нажатии на Cancel
        CDialog.CancelError = True

        CDialog.MaxFileSize = MaxFileSize
        CDialog.Flags = Flags
        CDialog.DefaultExt = DefaultExt                                                           
        CDialog.Filter = Filter                                                                   
        CDialog.FilterIndex = FilterIndex                                                         
        CDialog.InitDir = InitDir                                                                 
        CDialog.FileName = FileName

' Установим, какой диалог нужно отображать...
    Select Case  LCase(Action)                                                                    
           Case "showopen"                                                                        
                CDialog.ShowOpen                                                                  
           Case "showsave"                                                                        
                CDialog.ShowSave                                                                  
           Case Else                                                                              
                CDialog.FileName = ""                                                             
    End Select                                                                                    

' Если при выборе файла произошла ошибка, то будем считать, что имя файла пустое...
    If Err.Number Then                                                                            
       Err.Clear                                                                                  
       CDialog.FileName = ""                                                                      
    end If                                                                                        

' Придадим функции нужное значение
    CommonDialog = CDialog.FileName                                                               
                                                                                                  
    Set CDialog = Nothing                                                                         
                                                                                                  
End Function                                            
                                                                                                     


Это сообщение отредактировал(а) mihanik - 14.3.2007, 11:26


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

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

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

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

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


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

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


 




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


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

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