Здраствуйте уважаемые эксперты!!! У меня есть несколько вопросов на которые хотел бы знат ответ. Во-первых как узнать свободное место на разделах жесткого диска? Потом уже поднадоевшая мне проблема: как по заданому пути определить есть ли там например папка ну скажем ВАСЯ, а если есть то например записать в нее файл какой-то. И еще как узнать вообще есть ли по заданому пути в папке файлы. Потом хочу узнать как програмным методом вырезать и вставлять файлы. Как на ВБ переименовываются файлы и папки. И последнее. Я свои готовые программы запаковываю Winrar 3.3 потом я руками прописываю программу в установке и удалении программ, экспортирую оттуда файл реестра а потом попросту его запускаю. Знаю это непрофессионально. Слышал есть программы которые запаковывают программы и прописуют также в реестр. Пожалуйста посоветуйте какую нибудь русскую програмку для
такой упаковки. У меня есть прога _ISDELL она из 5-го Делфи но она английская :-( Да кс
тати впомнил в ВБ тоже ведь есть мастер создания инсталляционного варианта. Но он у меня викидывает какую-то ошибку. Я вас очень прошу помогите разобраться во всех этих вопросах или некоторых. Я вам чесно скажу весь прошлый год я учил С++ в универе(причем достаточно нормально) и в ВБ почти не шарю пожалуйста присылайте мне коды если не трудно :-). И еще вспомнил в С++ была команда перехода на новую строчку
какой аналог есть на ВБ ? А то у меня есть такая проблемма в message box. Заранее спасибо за ответы.
Добрый день, Евгений! Ну, что ж. При определении свободного места на диске можно обойтись и без FSO. Это требует знание типов данных ВБ и немножко ловкости. Приведу пример как я решил эту проблему. Тогда я не знал про FSO, но у меня была книга Эпплмана "Visual Basic и Win32API", в которой эта проблема было решена отличным от предлагаемых нами способов. Итак, пример. Создаем класс с именем (свойство Name) LongInt. Помещаем в окно кода следующие строки: Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _ lpDest As Any, _ lpSourse As Any, _ ByVal cbCopy As Long) Private Type LARGE_INTEGER lngLowWord As Long lngHiWord As Long End Type Private Type LARGE_INTEGER_DEC decLowWord As Variant decHiWord As Variant End Type Private Type LARGE_INTEGER_CUR
curLowWord As Currency curHiWord As Currency End Type Pr
ivate li As LARGE_INTEGER Private LID As LARGE_INTEGER_DEC Private LIC As LARGE_INTEGER_CUR Private mvarПрямойПорядокВ64Разрядах As Boolean 'local copy Public Property Let ПрямойПорядокВ64Разрядах(ByVal Значение As Boolean) mvarПрямойПорядокВ64Разрядах = Значение End Property Public Property Get ПрямойПорядокВ64Разрядах() As Boolean ПрямойПорядокВ64Разрядах = mvarПрямойПорядокВ64Разрядах End Property Public Function LongTo64Digits(Sou1 As Long, Sou2 As Long) As Variant If mvarПрямойПорядокВ64Разрядах Then li.lngHiWord = Sou1 li.lngLowWord = Sou2 Else li.lngHiWord = Sou2 li.lngLowWord = Sou1 End If 'LIC.curLowWord = ДлинноеКДенежному(li.lngLowWord) 'LIC.curHiWord = ДлинноеКДенежному(li.lngHiWord) 'LID.decLowWord = CDec(LIC.curLowWord) 'LID.decHiWord = CDec(LIC.curHiWord) LID.decLowWord = LongToDecimal(li.lngLowWord) LID.decHiWord
= LongToDecimal(li.lngHiWord) LID.decHiWord = LID.de
cHiWord * 2 ^ 32 LongTo64Digits = LID.decHiWord + LID.decLowWord End Function Public Function LongToDecimal(Value As Long) As Variant Dim Temp As Long Dim varTemp As Variant
Temp = CDec(Value) LongToDecimal = CDec(LongToDecimal) If Temp < 0 Then varTemp = 2 ^ 32 - 1 + Temp Else varTemp = Temp End If LongToDecimal = varTemp End Function Private Sub Class_Initialize() mvarПрямойПорядокВ64Разрядах = True End Sub Создаем форму. Помещаем на нее контрол Drive с именем Drive1 и контрол Label с именем Label1. Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" _ (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As LARGE_INTEGER, _ lpTotalNumbersOfBytes As LARGE_INTEGER, lpTotalNumbersOfFreeBytes As LARGE_INTEGER) As Long Private Sub Drive1_Change() Dim
Temp As Long Dim FreeBytesUser As LARGE_INTEGER Dim FreeBytes As LARGE_I
NTEGER Dim TotalBytes As LARGE_INTEGER Dim varFreeBytesUser As Variant Dim varFreeBytes As Variant Dim varTotalBytes As Variant Temp = GetDiskFreeSpaceEx(Left$(Drive1.Drive, 2), FreeBytesUser, TotalBytes, FreeBytes) Debug.Print Drive1.Drive Debug.Print "Свободно для пользователя: " Debug.Print vbTab & "Hi: " & FreeBytesUser.lngHiWord Debug.Print vbTab & "Low: " & FreeBytesUser.lngLowWord Debug.Print "Свободно: " Debug.Print vbTab & "Hi: " & FreeBytes.lngHiWord Debug.Print vbTab & "Low: " & FreeBytes.lngLowWord Debug.Print "Всего: " Debug.Print vbTab & "Hi: " & TotalBytes.lngHiWord Debug.Print vbTab & "Low: " & TotalBytes.lngLowWord varFreeBytes = LongTo64Digits(FreeBytes.lngHiWord, FreeBytes.lngLowWord) varFreeBytesUser = LongTo64Digits(FreeBytesUser.lngHiWord,
FreeBytesUser.lngLowWord) varTotalBytes = LongTo64Digits(TotalBytes.lngHi
Word, TotalBytes.lngLowWord) Label1.Caption = "Свободно для пользователя: " & varFreeBytesUser & vbCrLf & _ "Свободно всего: " & varFreeBytes & vbCrLf & _ "Всего: " & varTotalBytes DiskInfo Left$(Drive1.Drive, 2) End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload DiskSize End Sub Private Sub Form_Load() Drive1_Change End Sub Sub DiskInfo(strDrive As String) Dim Temp As Long Dim FreeBytesUser As LARGE_INTEGER Dim FreeBytes As LARGE_INTEGER Dim TotalBytes As LARGE_INTEGER Dim varFreeBytesUser As Variant Dim varFreeBytes As Variant Dim varTotalBytes As Variant Temp = GetDiskFreeSpaceEx(strDrive, FreeBytesUser, TotalBytes, FreeBytes) varFreeBytes = LongTo64Digits(FreeBytes.lngHiWord, FreeBytes.lngLowWord) varFreeBytesUser = LongTo64Digits(FreeBytesUser.lngHiWord,
FreeBytesUser.lngLowWord) varTotalBytes = LongTo64Digits(TotalB
ytes.lngHiWord, TotalBytes.lngLowWord) Debug.Print "Диск: " & strDrive & vbCrLf & _ "Свободно для пользователя: " & varFreeBytesUser & vbCrLf & _ "Свободно всего: " & varFreeBytes & vbCrLf & _ "Всего: " & varTotalBytes End Sub Насчет установки. Можно воспользоваться программой Install Sheild Express. Правда она на английском языке. Но там все понятно и без перевода. Выбираешь проект ВБ. А дальше настроиваешь сами диалоги установки. Можно уставку сделать и из WinRar. Создать sfx-архив и в нем прописать сценарий распаковки (см. справку WinRAR), в котором написать что нужно делать. Так же могу посоветовать оформлять код, которым часто придеться пользоваться в виде фукнций в отдельных модулях, например, в одном работа с файлами, в другом поиск, сортировка данных, и т.д. Приведу некоторые функции для работы с файлами. Определение
существования файла или каталога с заданным именем Public Function FileExists(
ИмяФайла As String, Optional attrib As VbFileAttribute = vbNormal) As Boolean If Dir$(ИмяФайла, attrib) <> "" Then FileExists = True Else FileExists = False End If End Function
Ответ отправлен: 07.10.2004, 18:36 Отправитель: Puma Отвечает Licvidator
Добрый день, Евгений! 1. Подключите Microsoft Scripting Runtime (через Проект - Информация). Далее пишите след. код: Dim s As New Scripting.FileSystemObject Dim d As Drive Text1 = "Drive" & vbTab & " Free space " & vbCrLf MousePointer = vbHourglass For Each d In s.Drives DoEvents If d.IsReady Then Text1 = Text1 & d.DriveLetter & vbTab & _ d.FreeSpace & vbCrLf Else Text1 = Text1 & d.DriveLetter & vbTab & _ "Not Ready." & vbCrLf End If Next d
2. Dim path As String path = "c:\windows" If Dir(path, vbDirectory) <> "" Then 'Если папка c:\windows существует, то создаем файл Open path & "\test.txt" For Output As #1 Print #1, "привет" Close #1 End If
3. Чтобы узнать о существовании файлов в конкретной
папке - читайте про ф-ию Dir в справке (MSDN). 4. FileCopy path, new_path - копи
рование файлов/папок Kill path - удаление файлов/папок Name old_name As new_name - переименование файлов/папок 5. vbCrLf - перевод на новую строку. 6. Насчет упаковщика - ничем помочь не могу, в свое вермя я сам писал инсталляционный пакет, чего и Вам советую. Заодно получите очередной навык с работой в ВБ. Если нужна будет помощь при работе с реестом (программно) - обращайтесь. Удачи! Ответ отправлен: 07.10.2004, 13:35 Отправитель: Licvidator Отвечает Miklucho
Приветствую Вас, Евгений! Насчет перехода на новую строчку - вставляешь в строку ASCII-код символа перевода(13) и все. #: msgbox "Привет" & chr(13) & "Евгений". После этого "Евгений" будет на второй строке. Насчет программ инсталляторов - поищи в Инете, они почти наверняка коммерческие, но должны и триальные версии. Ответ отправлен: 08.10.2004, 10:59 Отправитель: Miklucho
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.