Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: domkratt.com
 Профиль | | #4
Добавлено: 19.12.07 14:00
Const MAX_PATH = 260

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-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 19.12.07 15:16
Хм, народ вы чо?
А нельзя разве тупо юзать FileListBox с свойством Pattern = "*.lng" ???

Ответить

Номер ответа: 7
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #7
Добавлено: 19.12.07 21:34
вот я знал, что кто-то это скажет =)
сравни код под отладчиком. сравни размер и скорость =)

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 19.12.07 22:21
Размер чего сравнить? При десятке языковых файлов скорость врядли будет различаться. Тем более мне казалось, что FileListBox быстрее кода.

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 19.12.07 23:35
Тем более мне казалось, что FileListBox быстрее кода.
Это иллюзия :)

Ответить

Номер ответа: 10
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #10
Добавлено: 19.12.07 23:39
он работает не быстрее, поверь моему опыту) я знаю что такое код MSVBVM не по наслышке)

Ответить

Номер ответа: 11
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #11
Добавлено: 20.12.07 01:20
И всё-таки размер чего предлагалось сравнить?=)

Ответить

Номер ответа: 12
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #12
Добавлено: 20.12.07 01:26
размер выходного файла. объем памяти, который кушается

Ответить

Номер ответа: 13
Автор ответа:
 KreAtoR



Вопросов: 120
Ответов: 438
 Профиль | | #13 Добавлено: 20.12.07 11:24
С этим я разобрался. Возникла следующая проблема. Файл я нашел и выбрал. Это в принципе обычный текстовой файл с расширением lng.
вышлядит примено так

"Start"
"Strating..."
"Stop"
"Stopping..."
"Add"
"Adding..."
"Cut"
"Cutting..."
"Name"
"Start"
"Lenght"
"Comment"


тоесть каждая переменная пишется в новую строку.

что надо сделать чтобы достать из всего файла только определенную строку????

использую такой код

Open langAdress & language & ".lng" For Input As 1
    
    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-сайт: winandfx.narod.ru
 Профиль | | #14
Добавлено: 20.12.07 21:37
возможно я не прав)) но INI решает
Я юзаю вот такой код (меню и r'gi'ys окон вручную прописаны как видно)
'Name: Poliglotto
'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 Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
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-сайт: winandfx.narod.ru
 Профиль | | #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:

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам