- PR -

別コンピュータのINIファイルから情報を読み込みたい

投稿者投稿内容
じゅん
会議室デビュー日: 2005/07/15
投稿数: 8
投稿日時: 2006-06-22 23:11
ASP.NET(VB.NET)にて、
INIファイルより情報を取得するプログラムを作成しています。
自マシンの情報C:\やD:\は情報を取得できたのですが、
ネットワークドライブ割り当てしたドライブにあるINIファイルの情報を
取得することができません。
そのコンピュータのIPアドレス指定したり、マシン名を指定してみましたが
それも取得できませんでした。

どなたか、方法をご教授いただけないでしょうか。

環境は、下記のとおりです。
OS:WinXP
言語:VB.NET

プログラム
-------------------------------------------------------------------
Friend Class IniFileHandler
Declare Function GetPrivateProfileString Lib "KERNEL32.DLL" Alias "GetPrivateProfileStringA" ( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As StringBuilder, ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
End Class

Public Module IniFile
Private Const FILE_NAME As String = "H:\test.ini"
Public Function GetIniFileDataString(ByVal lpAppName As String, ByVal lpKeyName As String) As String
Dim sb As StringBuilder = New StringBuilder(1024)
Try
' 文字列を読み出す
UserConfigIniFileHandler.GetPrivateProfileString(lpAppName,lpKeyName, "", sb, sb.Capacity, FILE_NAME)
Return sb.ToString()

Catch ex As Exception
End Try
End Function
End Module
-------------------------------------------------------------------
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-22 23:27
取得できないってことは例外が発生しているのですか?
発生しているなら例外の内容を書きましょう。
まぁ権限の問題な気もしますが。。。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-22 23:52
ネットワークドライブは誰に対して割り当てていますか?
ASP.NETのプロセスが誰で起動されるかを注意してください。
じゅん
会議室デビュー日: 2005/07/15
投稿数: 8
投稿日時: 2006-06-23 00:41
例外は発生しません。
未記入
常連さん
会議室デビュー日: 2006/04/11
投稿数: 23
投稿日時: 2006-06-23 09:42
引用:

じゅんさんの書き込み (2006-06-23 00:41) より:
例外は発生しません。


本当に例外は発生していませんでしたか?

引用:

Try
' 文字列を読み出す
UserConfigIniFileHandler.GetPrivateProfileString(lpAppName,lpKeyName, "", sb, sb.Capacity, FILE_NAME)
Return sb.ToString()

Catch ex As Exception
End Try


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-23 10:45
引用:

じゅんさんの書き込み (2006-06-23 00:41) より:

例外は発生しません。


PInvoke 側ですから、'例外' は発生しないでしょうね。
むちゃくちゃなパスだろうと何だろうとスルーしますから。

System.Runtime.InteropServices.Marshal.GetLastWin32Error メソッドでも取得できないでしょう。
というよりは、'失敗' はともかく、'エラー' が起きる関数ではないと思われます。(多分)

とりあえず、以下のコードで正常に INI ファイルから文字列を取得できることを確認しています。

コード:

    <System.Runtime.InteropServices.DllImport("KERNEL32.dll", SetLastError:=True)> _
    Private Shared Function GetPrivateProfileString( _
        ByVal lpAppName        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
    End Function

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim sb As New System.Text.StringBuilder(1024)

        GetPrivateProfileString("App", "Key", "DEFAULT", sb, sb.Capacity, "M:\MakiMaki.ini")

        MessageBox.Show(sb.ToString())
    End Sub


最初に、burton999 さんが書かれていますが、権限周りを調べてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゅん
会議室デビュー日: 2005/07/15
投稿数: 8
投稿日時: 2006-06-23 19:11
誤ったパスなどでも、例外は発生しませんでした。

ASP.NETだから、うまくいかないとかあるのでしょうか。
権限周りを調べていますが、なかなかうまくいきません・・。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-06-23 21:57
とりあえず"H:\test.ini"をStreamReaderなどで普通に開けるか確認してみてはいかがでしょう?
おそらく例外が発生するのでは??

スキルアップ/キャリアアップ(JOB@IT)