C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: c#でINIファイルの全セクションを取得


(過去ログ 76 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■44846 / inTopicNo.1)  c#でINIファイルの全セクションを取得
  
□投稿者/ たろ (54回)-(2009/12/21(Mon) 13:36:21)

分類:[.NET 全般] 

お世話になっております。たろです。

現在、c#のクライアントアプリでINIファイルを読み込む処理を行っています。

セクション名を指定して情報を取得する処理は、
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);

を使用して実現できているのですが、
セクション名だけを取得する処理がわかりません。。

GetPrivateProfileSectionNames関数を使用するかと思いやっているのですが、いまいちわかりません。

どなたかご教授ください。
引用返信 編集キー/
■44847 / inTopicNo.2)  Re[1]: c#でINIファイルの全セクションを取得
□投稿者/ επιστημη (2328回)-(2009/12/21(Mon) 14:05:36)
επιστημη さんの Web サイト
2009/12/21(Mon) 14:15:05 編集(投稿者)

> GetPrivateProfileSectionNames関数を使用するかと思いやっているのですが、いまいちわかりません。

"いまいち"を説明してください。
なにがわかり、なにがわからんですか?

↓ ご参考
http://www.pinvoke.net/default.aspx/kernel32/GetPrivateProfileSectionNames.html

引用返信 編集キー/
■44848 / inTopicNo.3)  Re[1]: c#でINIファイルの全セクションを取得
□投稿者/ 魔界の仮面弁士 (1435回)-(2009/12/21(Mon) 16:06:19)
No44846 (たろ さん) に返信
> セクション名を指定して情報を取得する処理は、
> [DllImport("kernel32")]
> private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
> を使用して実現できているのですが、
> セクション名だけを取得する処理がわかりません。。

GetPrivateProfileString API だけでいけますよ。
http://msdn.microsoft.com/ja-jp/library/cc429779.aspx

// C#
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern int GetPrivateProfileString(
    string section,
    string key,
    string def,
    char[] retVal,
    int size,
    string filePath);

static void Main(string[] args)
{
    char[] buf = new char[1024];
    int ret = GetPrivateProfileString(null, null, null, buf, buf.Length, "odbc.ini");
    string sectionsText = new string(buf, 0, ret);
    string[] sections = sectionsText.TrimEnd('\0').Split('\0');

    // 内容確認
    Array.ForEach(sections, Console.WriteLine);
}

'-----------------------------------------

' Visual Basic
Declare Auto Function GetPrivateProfileString Lib "kernel32" _
    (ByVal section As String, _
     ByVal key As String, _
     ByVal def As String, _
     <Out(), MarshalAs(UnmanagedType.LPTStr)> ByVal buf As String, _
     ByVal size As Integer, _
     ByVal file As String) As Integer

Sub Main()
    Dim buf As String = StrDup(1024, vbNullChar)
    Dim ret As Integer = GetPrivateProfileString(Nothing, Nothing, Nothing, buf, buf.Length, "odbc.ini")
    Dim sections() As String = Left(buf, ret).TrimEnd(vbNullChar).Split(vbNullChar)

    '内容確認
    Array.ForEach(sections, AddressOf Console.WriteLine)
End Sub

引用返信 編集キー/
■44858 / inTopicNo.4)  Re[2]: c#でINIファイルの全セクションを取得
□投稿者/ たろ (55回)-(2009/12/22(Tue) 11:23:50)
ご返信ありがとうございます!


GetPrivateProfileStringByByteArray関数を使用して取得する事ができました!


[DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringA")]
public static extern uint
GetPrivateProfileStringByByteArray(string lpAppName,
string lpKeyName, string lpDefault,
byte[] lpReturnedString, uint nSize,
string lpFileName);


ArrayList aryRet = new ArrayList();
// 指定ファイルのセクションの一覧を得る
byte[] ar2 = new byte[1024];
uint resultSize2 = GetPrivateProfileStringByByteArray(null, null, "WEB01", ar2, (uint)ar2.Length, m_iniFilePath);

string result2 = Encoding.Default.GetString(ar2, 0, (int)resultSize2 - 1);
string[] sections = result2.Split('\0');
string val_tmp = "";
foreach (string section in sections)
{
}

なるほど!
GetPrivateProfileString関数でもできたんですね!
勉強になります!

ありがとございました!


No44848 (魔界の仮面弁士 さん) に返信
> ■No44846 (たろ さん) に返信
>>セクション名を指定して情報を取得する処理は、
>>[DllImport("kernel32")]
>>private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
>>を使用して実現できているのですが、
>>セクション名だけを取得する処理がわかりません。。
>
> GetPrivateProfileString API だけでいけますよ。
> http://msdn.microsoft.com/ja-jp/library/cc429779.aspx
>
> // C#
> [DllImport("kernel32", CharSet = CharSet.Auto)]
> private static extern int GetPrivateProfileString(
> string section,
> string key,
> string def,
> char[] retVal,
> int size,
> string filePath);
>
> static void Main(string[] args)
> {
> char[] buf = new char[1024];
> int ret = GetPrivateProfileString(null, null, null, buf, buf.Length, "odbc.ini");
> string sectionsText = new string(buf, 0, ret);
> string[] sections = sectionsText.TrimEnd('\0').Split('\0');
>
> // 内容確認
> Array.ForEach(sections, Console.WriteLine);
> }
>
> '-----------------------------------------
>
> ' Visual Basic
> Declare Auto Function GetPrivateProfileString Lib "kernel32" _
> (ByVal section As String, _
> ByVal key As String, _
> ByVal def As String, _
> <Out(), MarshalAs(UnmanagedType.LPTStr)> ByVal buf As String, _
> ByVal size As Integer, _
> ByVal file As String) As Integer
>
> Sub Main()
> Dim buf As String = StrDup(1024, vbNullChar)
> Dim ret As Integer = GetPrivateProfileString(Nothing, Nothing, Nothing, buf, buf.Length, "odbc.ini")
> Dim sections() As String = Left(buf, ret).TrimEnd(vbNullChar).Split(vbNullChar)
>
> '内容確認
> Array.ForEach(sections, AddressOf Console.WriteLine)
> End Sub
引用返信 編集キー/
■44859 / inTopicNo.5)  Re[3]: c#でINIファイルの全セクションを取得
□投稿者/ たろ (56回)-(2009/12/22(Tue) 11:24:58)
No44858 (たろ さん) に返信
> ご返信ありがとうございます!
>
>
> GetPrivateProfileStringByByteArray関数を使用して取得する事ができました!
>
>
> [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringA")]
> public static extern uint
> GetPrivateProfileStringByByteArray(string lpAppName,
> string lpKeyName, string lpDefault,
> byte[] lpReturnedString, uint nSize,
> string lpFileName);
>
>
> ArrayList aryRet = new ArrayList();
> // 指定ファイルのセクションの一覧を得る
> byte[] ar2 = new byte[1024];
> uint resultSize2 = GetPrivateProfileStringByByteArray(null, null, "WEB01", ar2, (uint)ar2.Length, m_iniFilePath);
>
> string result2 = Encoding.Default.GetString(ar2, 0, (int)resultSize2 - 1);
> string[] sections = result2.Split('\0');
> string val_tmp = "";
> foreach (string section in sections)
> {
> }
>
> なるほど!
> GetPrivateProfileString関数でもできたんですね!
> 勉強になります!
>
> ありがとございました!
>
>
> ■No44848 (魔界の仮面弁士 さん) に返信
>>■No44846 (たろ さん) に返信
> >>セクション名を指定して情報を取得する処理は、
> >>[DllImport("kernel32")]
> >>private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
> >>を使用して実現できているのですが、
> >>セクション名だけを取得する処理がわかりません。。
>>
>>GetPrivateProfileString API だけでいけますよ。
>>http://msdn.microsoft.com/ja-jp/library/cc429779.aspx
>>
>>// C#
>>[DllImport("kernel32", CharSet = CharSet.Auto)]
>>private static extern int GetPrivateProfileString(
>> string section,
>> string key,
>> string def,
>> char[] retVal,
>> int size,
>> string filePath);
>>
>>static void Main(string[] args)
>>{
>> char[] buf = new char[1024];
>> int ret = GetPrivateProfileString(null, null, null, buf, buf.Length, "odbc.ini");
>> string sectionsText = new string(buf, 0, ret);
>> string[] sections = sectionsText.TrimEnd('\0').Split('\0');
>>
>> // 内容確認
>> Array.ForEach(sections, Console.WriteLine);
>>}
>>
>>'-----------------------------------------
>>
>>' Visual Basic
>>Declare Auto Function GetPrivateProfileString Lib "kernel32" _
>> (ByVal section As String, _
>> ByVal key As String, _
>> ByVal def As String, _
>> <Out(), MarshalAs(UnmanagedType.LPTStr)> ByVal buf As String, _
>> ByVal size As Integer, _
>> ByVal file As String) As Integer
>>
>>Sub Main()
>> Dim buf As String = StrDup(1024, vbNullChar)
>> Dim ret As Integer = GetPrivateProfileString(Nothing, Nothing, Nothing, buf, buf.Length, "odbc.ini")
>> Dim sections() As String = Left(buf, ret).TrimEnd(vbNullChar).Split(vbNullChar)
>>
>> '内容確認
>> Array.ForEach(sections, AddressOf Console.WriteLine)
>>End Sub
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -