Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как заставить работать в .NET функции API Добавлено: 02.02.07 09:32  

Автор вопроса:  Visual Basic .NET 2005 Пиратская версия | Web-сайт: ex3mos.ucoz.ru
Не работают GetPrivateProfileString и WritePrivateProfileString. В MSDN прочитал что надо в реестр чо-то записать. Я записал, WritePrivateProfileString заработал а GetPrivateProfileString нет. Пришлось писать альтернативу, но она работает не так быстро. Как сделать чтобы GetPrivateProfileString заработала??? В MSDN есть API-Reference но там все на C/C++
Вот исходник альтернативы:

 Function ReadStr(ByVal linename As String, ByVal FileName As String, ByVal alllines As Boolean) As String
        ' Создаем StreamReader
        Dim LineReader As StreamReader = New StreamReader(FileName)
        ' Если вообще не загрузилось (маловозможно, но один раз было) то
        ReadStr = "Exception"
        Try
            Dim Line As String
            If alllines = False Then
                ' Если не нашли то
                ReadStr = "TxtNotFound"
                ' Читаем и проверяем записи на нужное значение
                ' до тех пор пока файл не кончился
                Do
                    Line = LineReader.ReadLine()
                    If Not linename.Length > Line.Length Then
                        Dim fff As String = Line.Substring(0, linename.Length)
                        If linename = fff Then
                            ReadStr = Line
                            Exit Do
                        End If
                    End If
                Loop Until Line Is Nothing
                LineReader.Close()
            Else
                Do
                    ReadStr = Nothing
                    Line = LineReader.ReadLine
                    ReadStr = ReadStr + Line
                Loop Until Line Is Nothing
            End If
        Catch ex As Exception
            ' Что случилось??
            MessageBox.Show("Ошибка чтения файла: " + ex.ToString, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Function

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 02.02.07 09:50
А зачем тебе понадобились *.ini файлы?

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 02.02.07 10:24
Ты не прав потому что эти функции в .NET работают.

Если бы ты привел исходники с АПИ, может быть, мы бы подсказали тебе что нужно делать.

Ответить

Номер ответа: 3
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #3 Добавлено: 03.02.07 00:08
Если не обязательно использовать текстовый файл, то юзай хештабл "hashtable", упрощает поиск, сохраняет данные по принципу "КЛЮЧ" - "ЗНАЧЕНИЕ"
Сохраняется на диск тремя строчками кода "serialization" Если интересно, подкину примеры.

Ответить

Номер ответа: 4
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #4
Добавлено: 04.02.07 10:23
Если не обязательно использовать текстовый файл, то юзай хештабл "hashtable", упрощает поиск, сохраняет данные по принципу "КЛЮЧ" - "ЗНАЧЕНИЕ"
Сохраняется на диск тремя строчками кода "serialization" Если интересно, подкину примеры.

Спасибо, но нужно с ИНИшниками работать.
А зачем тебе понадобились *.ini файлы?

Настройки сохранять, а то ресурсы ReadOnly. Заинтересовался как-то методом писать в exe, но прога же запущена!

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 04.02.07 10:52
Какая версия VB?
В 2005-й есть очень удобная модель для работы с настройками приложения.

Ответить

Номер ответа: 6
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #6 Добавлено: 04.02.07 14:27

Спасибо, но нужно с ИНИшниками работать.

А зачем тебе понадобились *.ini файлы?

Настройки сохранять, а то ресурсы ReadOnly. Заинтересовался как-то методом писать в exe, но прога же запущена!


Ну так и пользуй "hashtable" для сохранения настроек проги, намного удобней, а потом сериализуй на диск в .bin или .xml в зависимости от сериализатора, если нужен пример, дай знать

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 04.02.07 23:53
Никаких HashTable... никаких ini тебе не надо..
В VS 2005 для хранения настроек есть чрезвычайно удобная штука называется она My.Settings.. Без единой строчки кода позволяет хранить практически любые настройки твоей программы..

Ответить

Номер ответа: 8
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #8
Добавлено: 07.02.07 10:42
Ну так и пользуй "hashtable" для сохранения настроек проги, намного удобней, а потом сериализуй на диск в .bin или .xml в зависимости от сериализатора, если нужен пример, дай знать

пример нужен
В VS 2005 для хранения настроек есть чрезвычайно удобная штука называется она My.Settings.. Без единой строчки кода позволяет хранить практически любые настройки твоей программы..

Она кажется ReadOnly. дай ка ссыдку на пример, или выложи на форум

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 07.02.07 10:52
Она кажется ReadOnly

Да какая нах ReadOnly??? Там вместо Application установи User и всего делов.. А примеров в MSDN туча

Ответить

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



Вопросов: 8
Ответов: 482
 Профиль | | #10 Добавлено: 11.02.07 21:22
Извиняюсь за задержку, времени небыло на форум залезть
вот пример работы с hashtable

    Private Function LoadHashTableFull(ByVal Filename As String) As Hashtable
        Dim f As IO.File
        If Not f.Exists(Filename) Then Exit Function
        Dim ht As New Hashtable
        Dim fs As New IO.FileStream(Filename, IO.FileMode.Open)
        Dim sc As New Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.File)
        Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, sc)
        Try
            ht = DirectCast(formatter.Deserialize(fs), Hashtable)
            If Not ht Is Nothing Then
                Return ht
            End If
        Catch ex As Exception
            ExceptionShow(ex)
            Return Nothing
        Finally
            fs.Close()
        End Try
    End Function

 вот функция сохранения пары "ключ - значение"

    Public Function SaveToFile(ByVal key As Object, ByVal value As Object, ByVal filename As String) As Boolean
        Dim f As IO.File
        If Not f.Exists(filename) Then Exit Function
        Dim fs As New IO.FileStream(filename, IO.FileMode.OpenOrCreate)
        Dim sc As New Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.File)
        Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, sc)
        Dim ht As Hashtable
        Try
            ht = LoadHashTableFull(filename)
            ht.Add(key, value)
            formatter.Serialize(fs, ht)
            Return True
        Catch ex As Exception
            ExceptionShow(ex)
            Return False
        Finally
            fs.Close()
        End Try
    End Function

 а вот эту функцию используй чтобы создать начальный пустой файл перед тем как использовать первых две функции,

    Public Function CreateHTFile(ByVal filename As String) As Boolean
        Dim f As IO.File
        Dim fs As New IO.FileStream(filename, IO.FileMode.OpenOrCreate)
        Dim sc As New Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.File)
        Dim formatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, sc)
        Dim ht As New Hashtable
        Try
            formatter.Serialize(fs, ht)
            Return True
        Catch ex As Exception
            ExceptionShow(ex)
            Return False
        Finally
            fs.Close()
        End Try
    End Function


можно также использовать SOAP форматтер,
плюсы:
- можно редактировать в текстовом редакторе
- оптимальная передача через HTTP
минусы:
-скорость серилизации в 10 раз меньше бинарного аналога (binaryformatter оччень быстрый)
я все установки прог сохраняю таким методом (привычка с .НЕТ2003)

Ответить

Номер ответа: 11
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #11
Добавлено: 13.02.07 10:35
Пасибо. но я стал писать НА C++ ос.
не спорю что VB язык хороший, а VB.NET лучше но они предназначались под ВинДу

Ответить

Страница: 1 |

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



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