Страница: 1 | 2 |
Вопрос: как узнать количество файлов в папке и их названия
Добавлено: 19.12.07 12:03
Автор вопроса: KreAtoR
необходимо сделать следующее.
Есть папка языков. Хочу сделать динамическое определение новых языковых пакетов.
Для этого надо считать содержимое папки что бы узнать количество.
после того как узнали количество можно узнать названия файлов и вписать их в ComboBox.
Вопросы
1. как узнать сколько файлов лежат в папке (нужны только с расширением .lng)
2. как узнать их имена (без расширения) чтобы перекинуть их в массив
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #1
Добавлено: 19.12.07 12:29
Перебор всех файлов с проверкой на отсутствие аттрибута folder и проверка расширения, если совпадает - добавлять в список этих файлов. имена без расширения - split полный путь файла и с конца перебор до точки. Сейчас не дома, не могу дать пример.
Номер ответа: 2
Автор ответа:
Dan
Вопросов: 1
Ответов: 5
Профиль | | #2
Добавлено: 19.12.07 12:31
'пример на VB.NET
'получение информации обо всех файла и подкаталогах 'данного каталога
Dim di as DirectoryInfo
Dim fsi() as FileSystemInfo
dim dirName as String
dir="c:\primer"
try
di=New DirectoryInfo(dirName)
fsi=di.GetFileSystemInfos("*.lng" ' все *.lng
catch e as System.IO.DirectoryNotFoundException
messagebox.show("Каталог не существует" & dirName)
exit sub
end try
Dim info as FileSystemInfo
dim i as integer 'Подсчет количества *.lng
i=0
For Each info In fsi
i=i+1
'к примеру загоняем файлы в ListBox
list.Items.Add(Info.Name & " " & info.CreationFile())
next
MessageBox.Show("Найдено :" & Cstr(i) & " " & файлов с расширением *.lng)
Номер ответа: 3
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #3
Добавлено: 19.12.07 12:40
Arcady_XQST
очень жду пример
Dan
не разбираюсь в NET и даже не могу составить сходство.
может подскажите где можно пока поискать.
но пример очень жду
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 19.12.07 14:00
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Private Sub Form_Load()
Dim a() As String
Path = "c:\"
GetLngFiles Path, a()
End Sub
Function GetLngFiles(ByVal Path As String, ByRef Arr() As String) As Integer
Dim wfd As WIN32_FIND_DATA
Dim hSearch As Long
Dim Ret As Long
Dim Count As Integer
If Right(Path, 1) <> "\" Then Path = Path & "\"
hSearch = FindFirstFile(Path & "*.lng", wfd)
If hSearch = 0 Then Exit Function
ReDim Arr(0)
Arr(0) = StripExt(wfd.cFileName)
wfd.cFileName = String(MAX_PATH, 0)
Ret = 1
Count = 1
Do While True
Ret = FindNextFile(hSearch, wfd)
If Ret < 1 Then Exit Do
ReDim Preserve Arr(Count)
Arr(Count) = StripExt(wfd.cFileName)
wfd.cFileName = String(MAX_PATH, 0)
Count = Count + 1
Loop
FindClose hSearch
GetLngFiles = Count
End Function
Function StripExt(ByVal S As String)
StripExt = Left$(S, InStrRev(S, "." - 1)
End Function
Номер ответа: 5
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #5
Добавлено: 19.12.07 15:01
ура сенкс
Номер ответа: 6
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #6
Добавлено: 19.12.07 15:16
Хм, народ вы чо?
А нельзя разве тупо юзать FileListBox с свойством Pattern = "*.lng" ???
Номер ответа: 7
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #7
Добавлено: 19.12.07 21:34
вот я знал, что кто-то это скажет
сравни код под отладчиком. сравни размер и скорость
Номер ответа: 8
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #8
Добавлено: 19.12.07 22:21
Размер чего сравнить? При десятке языковых файлов скорость врядли будет различаться. Тем более мне казалось, что FileListBox быстрее кода.
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 19.12.07 23:35
Номер ответа: 10
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #10
Добавлено: 19.12.07 23:39
он работает не быстрее, поверь моему опыту) я знаю что такое код MSVBVM не по наслышке)
Номер ответа: 11
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #11
Добавлено: 20.12.07 01:20
И всё-таки размер чего предлагалось сравнить?
Номер ответа: 12
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #12
Добавлено: 20.12.07 01:26
размер выходного файла. объем памяти, который кушается
Номер ответа: 13
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #13
Добавлено: 20.12.07 11:24
С этим я разобрался. Возникла следующая проблема. Файл я нашел и выбрал. Это в принципе обычный текстовой файл с расширением lng.
вышлядит примено так
"Strating..."
"Stop"
"Stopping..."
"Add"
"Adding..."
"Cut"
"Cutting..."
"Name"
"Start"
"Lenght"
"Comment"
тоесть каждая переменная пишется в новую строку.
что надо сделать чтобы достать из всего файла только определенную строку????
использую такой код
With frmMain
Input #1, buttonStart(0)
Input #1, buttonStart(1)
Input #1, buttonStart(2)
Input #1, buttonStart(3)
Input #1, buttonAdd(0)
Input #1, buttonAdd(1)
Input #1, buttonCut(0)
Input #1, buttonCut(1)
Input #1, EventList(0)
Input #1, EventList(1)
Input #1, EventList(2)
Input #1, EventList(3)
Input #1, EventList(4)
Input #1, EventList(5)
Close #1
End With
только таким способом я могу достать значения по порядку, а вот перепрыгнуть через строку я не могу.
подскажите
Номер ответа: 14
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #14
Добавлено: 20.12.07 21:37
возможно я не прав)) но INI решает
Я юзаю вот такой код (меню и r'gi'ys окон вручную прописаны как видно)
'Version: 0
'Author: Winand
'Description: Adds multilanguage support to a VB application
Option Explicit
Public Langfile As String
Enum StrType
Caption = 0 'Static Captions
Message = 1 'Message Boxes
Tips = 2 'Tool Tips
Strings = 3 'Any other text in code
End Enum
'Msgbox Lite Multilingual
Public Function MsgBoxE(ByVal Prompt, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal StrIndex As Long = -1, Optional ByVal Param1 As String) As VbMsgBoxResult
If StrIndex <> -1 And Langfile <> "" Then
Dim tmp As String
tmp = GetString(StrIndex, Message) 'Получаем строку (если есть)
If tmp <> "" Then Prompt = tmp
End If
If Not (Param1 = "" Then Prompt = Replace(CStr(Prompt), "%1", Param1)
MsgBoxE = MsgBox(Prompt, Buttons)
End Function
'Gets a string with a specified index from lang-file
Public Function PStr(ByVal Str As String, ByVal StrIndex As Long) As String
If Langfile = "" Then PStr = Str: Exit Function
Dim tmp As String
tmp = GetString(StrIndex, Strings) 'Получаем строку (если есть)
If tmp <> "" Then PStr = tmp Else PStr = Str
End Function
'Gets a string of a specified type from lang-file
Private Function GetString(ByVal StrIndex As Long, Optional ByVal aType As StrType = Caption) As String
Dim Str As String
Select Case aType
Case Caption: Str = "Captions"
Case Message: Str = "Messages"
Case Tips: Str = "ToolTips"
Case Strings: Str = "Strings"
End Select
GetString = IniStringPrivate(Str, CStr(StrIndex), "", AppPath & Langfile)
End Function
Public Sub ApplyLang()
On Error GoTo 1:
If Langfile = "" Then Exit Sub
Dim frm As Form, ctrl As Control
Dim tmp As String
For Each frm In Forms: For Each ctrl In frm.Controls
If IsNumeric(ctrl.Tag) = True Then
tmp = GetString(ctrl.Tag, Caption)
If tmp <> "" Then ctrl.Caption = tmp
tmp = GetString(ctrl.Tag, Tips)
If tmp <> "" Then ctrl.ToolTipText = tmp
End If
Next ctrl: Next frm
'#### M E N U ####
tmp = GetString(9, Caption): If tmp <> "" Then Form1.mnuSave(0).Caption = tmp 'Сохранить как...
tmp = GetString(49, Caption): If tmp <> "" Then Form1.mnuSave(1).Caption = tmp 'Экспорт в буфер
tmp = GetString(10, Caption): If tmp <> "" Then Form1.mnuSave(2).Caption = tmp 'Экспорт в буфер
tmp = GetString(42, Caption): If tmp <> "" Then frm_loc.mnuUp.Caption = tmp 'Обновить
tmp = GetString(43, Caption): If tmp <> "" Then frm_loc.mnuAd.Caption = tmp 'Добавить
tmp = GetString(44, Caption): If tmp <> "" Then frm_loc.mnuDe.Caption = tmp: Form1.mnuDe.Caption = tmp 'Удалить
'#### F O R M S ####
tmp = GetString(7, Strings): If tmp <> "" Then frm_map.Caption = " " & tmp
tmp = GetString(8, Strings): If tmp <> "" Then frm_loc.Caption = " " & tmp
tmp = GetString(9, Strings): If tmp <> "" Then frm_LocOpt.Caption = " " & tmp
Exit Sub
1: MsgBox "Error #" & Err.Number & " - " & Err.Description, vbCritical
End Sub
Public Function IniStringPrivate(SekName As String, KeyName As String, DefaultVal As Variant, Optional IniFileName As String) As String
Dim sTemp As String * 556 'строковый буфер
Dim nTemp As Integer 'в неё запишется количество символов в строке ключа
If IniFileName = "" Then IniFileName = AppPath & "mconfig.ini"
nTemp = GetPrivateProfileString(SekName, KeyName, DefaultVal, sTemp, 555, IniFileName)
IniStringPrivate = Left$(sTemp, nTemp)
End Function
Номер ответа: 15
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #15
Добавлено: 20.12.07 21:40
r'gi'ys = кэпшэны )))
ini файлы примерно такие по структуре:
[FileInfo]
lang=English
ver=1.03
mconfig=0.1.0
creator=Winand
[Captions]
0=Map properties
1=Preview picture:
[ToolTips]
13=Here's info about your map. Any text you want.
14=Frame will be moved to this location. Blank = no jump.
[Messages]
0=Too many locations! There's 100 already. What for?
1=Check validity of entry fields.
[Strings]
0=Start positions:
1=Gas: