- - PR -
VB.NETでINIファイルのキー名を取得するには
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-17 15:25
VB.NETでローカルにあるINIファイルを読み込もうとしています。
キー名に当てられた値は GetPrivateProfileString(… で取得することができたのですが、 セクションが「TEST」内の キー名(5つ存在します)を取得することができません。 理想は5つのキー名をリストで取得することです。 どこかのHPに GetPrivateProfileSection("TEST", strResult, Len(strResult), "C:\test.ini") で取得できると書いてあったので試してみましたが、 何もかえってこないし strResultも音沙汰なしです…。 VB.NETではINIファイルのキー名を取得することはできないのでしょうか? 詳しい方いらっしゃいましたらおしえてください。 [ メッセージ編集済み 編集者: わしこ 編集日時 2006-05-17 15:30 ] >>>>追記 INIファイルの内容 [TEST] A1B=7v3Gl1GRo4Q4ZyTl0vBSWxXNFFIHGMqpI= C2D=7v3Gl1GRo4Q4ZyTl0vBSWxXN1Jc/zQshULFFIHG!!!!! E3F=7v3Gl1GRo4Q4ZyTl0vBSWxXN1Jc/zQshULFFIHGMqpI G4H=7v3Gl1GRo4Q4ZyTl0vBSWxXN1Jc/zQshULFFIHG$$$$= I5J=7v3Gl1GRo4Q4ZyT!!!!!WxXN1Jc/zQshULFFIHGMqpI= となっていて、取得したいのは 「A1B」「C2D」「E3F」「G4H」「I5J」 です。 [ メッセージ編集済み 編集者: わしこ 編集日時 2006-05-17 15:47 ] | ||||||||
|
投稿日時: 2006-05-17 15:47
GetPrivateProfileSection はどのように定義していますか? なにも帰ってこない のと 音沙汰が無い 変数には 何が入っていますか? | ||||||||
|
投稿日時: 2006-05-17 15:51
P/Invoke の宣言方法が間違えていたりしませんか? または、十分なバッファ サイズが渡っていないとか色々考えられるので、 とりあえず、GetPrivateProfileSection までの記述と DllImport の宣言部分を教えて頂けませんか? 個人的には、「XML ファイルを使ってください」と言いたい場面ですが、 私のサイトに、こんなものがありますので、使ってみるのも手かもしれません。 IniFile クラス 該当する機能を持つメソッドは、ReadSection メソッドです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-05-17 15:51
かるあさん、返答ありがとうございます。
解りにくい書き込みですみません。 *****GetPrivateProfileSectionの定義***** Declare Function GetPrivateProfileSection Lib "KERNEL32.dll" Alias "GetPrivateProfileSectionA" _ (ByVal lpAppName As String, ByVal lpReturnedString As String, _ ByVal nSize As Integer, ByVal lpFileName As String) As Integer ************************** 「音沙汰がない」と書いていましたが、 上のように定義しなおすと、一応値が入りました。 GetPrivateProfileSection("TEST", strResult, Len(strResult), "C:\test.ini") strResultに「A1B=7v3Gl1GRo4Q4ZyTl0vBSWxXNFFIHGMqpI=」という 値が返ってきました。 しかし、取得したいのは「A1B」「C2D」「E3F」「G4H」「I5J」 なのです。 | ||||||||
|
投稿日時: 2006-05-17 16:02
じゃんぬねっと様、返答ありがとうございます。
XMLを使用する方が推奨されているのですね。 なるべく単純な方法で最善の手段をとりたいと思っていますので、 参考にさせていただきいます。 以下、ソースです。 Imports System.Net Imports System.IO Imports System.Text Imports System.Security Imports System.Security.Cryptography Declare Function GetPrivateProfileSection Lib "KERNEL32.dll" Alias "GetPrivateProfileSectionA" _ (ByVal lpAppName As String, ByVal lpReturnedString As String, _ ByVal nSize As Integer, ByVal lpFileName As String) As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim strVar As String Dim ret As String Dim i As Integer Dim strResult As String = Space(255) GetPrivateProfileSection("TEST", strResult, Len(strResult), "C:\test.ini") End Sub | ||||||||
|
投稿日時: 2006-05-17 16:26
試していませんが、こんな感じでしょうか。
できない場合は、IntPtr から Byte 単位で読み込むことになるかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-05-17 16:39
MessageBox にしろ TextBox にしろ、NULL 文字以降は表示してくれないので「見た目には」失敗しているようにしか見えないかと。 NullChar で stBuffer を Split してやらないと。 Split する前に TrimEnd で後ろのよけいな NullChar を削除すると便利かな。 | ||||||||
|
投稿日時: 2006-05-17 16:39
String や StringBuilder で受けると NULL の部分で切れますね
Byte 配列で受けて整形する必要がありそうですね めんどくさい・・・ |