• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.NETでのiniファイル読込について。)

VB.NETでのiniファイル読込について

このQ&Aのポイント
  • .netでのiniファイル読込がうまくいかない問題について相談です。
  • VB.NETでのiniファイルの読み込みがうまくいかない状況で、質問の詳細やソースコードを共有しました。
  • 詳細な状況や環境、ソースコードを共有し、VB.NETでのiniファイル読み込みの問題の解決策を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • NYOI
  • ベストアンサー率58% (56/96)
回答No.2

vb6時代コードそのまんまになってるのが原因みたいです。 例えばLong型で宣言されている部分は.NETではIntegerになります。 その他数箇所手を入れました。 まずAPI部分 Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As System.Text.StringBuilder, _ ByVal nSize As Integer, _ ByVal lpFileName As String) As Integer つづいて INI_DBPATH_READ部分 Sub INI_DBPATH_READ(ByVal FilePath As String) Dim lngRet As Long '読み込みバッファ(固定長Stringというのは.NETではナイ) Dim strGetBuff As New System.Text.StringBuilder strGetBuff.Capacity = 256 'iniファイルより読み込む文字列のサイズ Dim intGetSize As Integer 'セクション名 Dim strSection As String 'キー名 Dim strKey As String '読み込みエラー時の出力文字列 Dim strErr As String 'iniファイル名(フルパス) Dim striniFn As String strSection = "TIFF_FOLDER" strKey = "PATH" strErr = "失敗" striniFn = Replace(GetAppPath(), "\bin", "\Ini") & "\test.ini" 'strGetBuffに文字列を取得する lngRet = GetPrivateProfileString(strSection, strKey, strErr, _ strGetBuff, strGetBuff.Capacity, striniFn) MsgBox(strGetBuff.ToString) End Sub これでうまくいくと思います。

Qoo1985
質問者

お礼

おおお!イケました。 固定長の部分が間違っていたのですね ありがとうございます!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • NYOI
  • ベストアンサー率58% (56/96)
回答No.1

どこでエラーになりますか? iniファイルの設置場所は間違っていませんか?

Qoo1985
質問者

補足

エラーと言うか、strErrの"失敗"が出力されます。 読み込めなかったと言う事ですよね。 ファイルの場所はapp.pathのiniフォルダなので間違いないと思うのですが… 私のソースで"成功"が出力されるはずなのですが、"失敗"なんです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB2008 iniファイルの全セクション取得方法

    こんばんわ。iniファイルの全セクションを取得したく、 以下のコードを使うことはわかったのですが、ここから先がVB初心者の為全く解かりません。ボタン1を押したらC:\Test.ini のファイルの全セクションを取得というコードはどのように記入すればよいのでしょうか。 どうぞ宜しくお願いいたします。 Declare Function GetPrivateProfileSectionNames Lib "Kernel32.dll" _ Alias "GetPrivateProfileSectionNamesA" _ (ByVal lpszReturnBuffer As String, ByVal nSize As Long, _ ByVal lpFileName As String) As Long

  • アクセスでテキストを開く

    アクセスでパスを指定して、特定のテキストファイルを開く方法を教えていただけますか? いかのモジュールを見つけたのですが、どこに、動かないか… フルパスを入れればよいか分かりません。 どうぞ宜しくお願いします。 *********************************************************************************************** Private Declare Function ShellExecute Lib "SHELL32.DLL" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub コマンド0_Click() Dim strFilePath As String Dim lngRet As Long Const SW_SHOWNORMAL = 1 strFilePath = Me.txt_Path 'WinAPIを使って関連付けられたアプリケーションを起動 lngRet = ShellExecute(Application.hWndAccessApp, "OPEN", _ strFilePath, vbNullString, CurDir(), SW_SHOWNORMAL) If lngRet <= 32 Then '返り値が 32 以下の場合はエラー MsgBox "ファイルを開けません!", vbOKOnly + vbExclamation End If End Sub ***********************************************************************************************

  • TextBoxの文字がかけてしまうのですが VB.NET

    VB.NET FrameWork1.1の環境なのですが、 Declare Function WritePrivateProfileString Lib "KERNEL32.DLL" Alias "WritePrivateProfileStringA" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpString As String, _ ByVal lpFileName As String) As Integer このAPIを使ってファイルに文字列を記録しているのですが、 TextBoxに表示したファイルのフルパスを記録すると このAPIを使った直後にそのTextBoxの文字の後半が欠けてしまいます。 短いパス名なら大丈夫なのですが、長いパス名の場合に欠けてしまいます。 試しに Dim a As String = TextBox1.Text WritePrivateProfileString("TextBox", "1", a, FileName) Console.WriteLine(a) としても同じく欠けてしまいます。 変数aの宣言の型をString ではなく Object にすると 欠けなくなるのですが、変数aやTextBoxの内容は読み取った だけなのになぜ書き換えられてしまうのでしょうか? どの場合でもファイルへの記録は正常に出来ています。 何か問題点などありましたらご教授いただけると助かります。

  • iniファイルの全セクションを取得し、ListBoxのitemにするには?VB2008

    こんにちは。VB2008を使用しています。 「Formロード時にiniファイルの全セクションを取得し、セクション1つずつをlistboxの項目にする」 という流れのコードを作成したいのですが、うまくいきません。 似たような質問などを調べてつぎはぎしてみたものの、うまく理解できなく困っています。 以下、現在記述中のコードです。 'APIの宣言 Declare Function GetPrivateProfileSectionNames Lib "Kernel32.dll" _ Alias "GetPrivateProfileSectionNamesA" _ (ByVal lpszReturnBuffer As string, ByVal nSize As Integer, _ ByVal lpFileName As String) As String 'form1ロード時 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim listboxsec As String Dim listboxitem() As String listboxsec.Capacity = 256 GetPrivateProfileSectionNames(listboxsec, 256, "./FileTest.ini") listboxitem = Split(listboxsec, "\") End Sub 最初の全セクションの取得方法がイマイチ分からない状況です。iniファイルは実行プログラムと同じ場所においてあります。 取得したセクションをSplitで配列に分け、for文でlistboxに追加していこうかと考えています。 どのような記述をすればいいのか、ご教示お願いいたします。

  • VB2008 INIファイル読み込みについて

    先日、VB6のソースを、アップグレードツールを使用しVB2008(無料版を使用)にコンバートしました。 そしてコンバート後、表示されているエラーとワーニングを全て取り、起動してみたのですが、特に変えた記憶のない設定ファイル読み込みの処理で失敗するようになり、起動しなくなりました。 デバッグ実行にて調べていくとどうやら、「GetPrivateProfileString」に対する引数にて、ファイル名(パス込み)を指定しているのですが、このファイル名の後半部分が一部削除されているようです。 (削除されている文字数は、どうやら、ファイルパスに含まれる全角文字列と同数のようでした。) 何が原因で起こっており、どうすれば直るのでしょうか・・・。 ネット上で調べてみたのですが、原因と直し方がイマイチ解らなくて、こちらで質問させていただきました。 どうか、ご教授いただけないでしょうか。<(_ _*)> (動作環境:Windows7 32bit版        Visual Studio2008 無料版)

  • INIファイルの読込みについて

    VB2005を使用しています。 INIファイルを読み込む関数で、GetPrivateProfileStringとGetPrivateProfileIntがありますが、この二つは文字列用、数値用と、なんとなく曖昧に憶えておりました。VBでINIファイルを読み込んだ場合、どちらも文字列、数値として取得できてしまうのですが、1つのプロジェクトでこれらを使い分ける意味はあるのでしょうか? できれば一つの関数で読込みを統一したいと思うので。。。 使い分ける意味があるとしたら、その理由についてもできれば教えてください。宜しくお願いいたします。

  • VB.netでパスワード変更

    下記のようなパスワードを変更するフォームをVB.netで作成したのですが、 実行すると、いつも異なるretValの値がかえってきて変更できません。 retValの値もよくわからない大きな数値がかえってくるのでどのようなエラーかも 判断つかず。 どこが間違っているかお分かりになる方いらっしゃいますでしょうか。 Public Class Form1 Private Declare Function NetUserChangePassword Lib "netapi32.dll" (ByVal Domain As String, ByVal User As String, ByVal OldPass As String, ByVal NewPass As String) As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim retVal As Long Dim sDomain As String Dim sUser As String Dim sOldPass As String Dim sNewPass As String sDomain = "xxxxxxx" ←ここはサーバのIPアドレス sUser = TextBox1.Text sOldPass = TextBox2.Text sNewPass = TextBox3.Text retVal = NetUserChangePassword(sDomain, sUser, sOldPass, sNewPass) MsgBox(retVal) End Sub End Class

  • ネットのファイルをダウンロードする方法を教えてください。

    web上のファイルをダウンロードするには Public Declare Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" (ByVal pCaller As Long, _ ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long と宣言してURLDownloadToFileを使えばできることがわかりましたが、うまく行かないケースがあります。おそらく通常の右クリックでダウンロードするものではなく、URLを左クリックして行うものだからじゃないかと思います。いいアイディアはないでしょうか??

  • VC++.net iniファイルパス指定の仕方

    VC++2005.netマネージでiniファイルを使いたいと思っています。 iniファイルから変数を読み込む関数GetPrivateProfileInt,GetPrivateProfileStringの引数にはiniファイルの絶対パス(c:\~set.ini)を指定しなければならないようです。 実行ファイルと同じ場所にiniファイルを置きたいのですが、これはどうやって指定するのでしょうか。 私が思いついたコードです。 String ^exepath = gcnew String(System::Windows::Forms::Application::ExecutablePath);//実行ファイルのパスを取得。 char charpath[500]={0}; sprintf(charpath,"%s",exepath->ToString);//string型からchar型へ変換する。 int len = strlen(charpath); charpath[len - ??] = \0;//実行ファイル名を消す char ininame[] = "setting.ini"; strcat(charpath,ininame); これは実行ファイルの絶対パスと実行ファイル名を取得し加工します。 c:\~~\prog\test.exe(string型の文字列) ↓ c:\~~\prog\test.exe(char型の文字列) ↓ c:\~~\prog\ (後ろつまり実行ファイル名の部分を削る) ↓ c:\~~\prog\setting.ini (iniファイル名を後ろに追加する。) ただ、これには問題がありこの変数を引数にしたのでは >'GetPrivateProfileIntW' : 1番目の引数を'const char[10]'から'LPCWSTRに変換できません。 と出ます。 どうすればiniファイルのパスを指定できるのでしょうか。

  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

液晶パネルの手動が出来ない
このQ&Aのポイント
  • DCP-J552Nの液晶パネルの手動ができないトラブルについて相談します。
  • Windowsで接続された無線LAN環境で使用しているDCP-J552Nの液晶パネルが手動で操作できません。
  • ひかり回線を使用しているDCP-J552Nの液晶パネルが手動で操作できなくなってしまったので、試したことやエラーについて教えてください。
回答を見る

専門家に質問してみよう