現在、C#(VisualStudio2005)で共有フォルダの認証を行い、
そのフォルダ内のファイルを読み込む処理を行ないたいと考えています。
■動作------------------------------------------------------
1.ボタン押下によってフォルダ(\\aaa)をユーザ(user)、パスワード(pass)で認証を行なう
2.ファイル(bbb.txt)の内容をメッセージボックスに出力する
3.認証を切る
■現在の実装状況--------------------------------------------
private void btnGetShareFileData_Click(object sender, EventArgs e)
{
NETRESOURCE netresource = new NETRESOURCE();
netresource.dwType = 1;
netresource.lpLocalName = null;
netresource.lpRemoteName = "\\\\aaa";
netresource.lpProvider = null;
try
{
int returnNo1 = WNetAddConnection3(IntPtr.Zero, ref netresource, "user", "pass", 0);
System.IO.StreamReader streamReader =
new System.IO.StreamReader("\\\\aaa\\bbb.txt", System.Text.Encoding.GetEncoding(932));
MessageBox.Show(streamReader.ReadToEnd());
int returnNo2 = WNetCancelConnection2("\\\\aaa", "0", true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
[StructLayout(LayoutKind.Sequential)]
public struct NETRESOURCE
{
public int dwType;
public string lpLocalName;
public string lpRemoteName;
public string lpProvider;
}
[DllImport("mpr.dll")]
private static extern int WNetAddConnection3(
System.IntPtr hWndOwner,
ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUserName,
int dwFlags
);
[DllImport("mpr.dll")]
private static extern int WNetCancelConnection2(
string lpName,
string dwFlags,
bool fForce
);
[DllImport("mpr.dll")]
private static extern int WNetAddConnection2(
ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUsername,
int dwFlags
);
■結果------------------------------------------------------
WNetAddConnection3の戻り値が「487」で
System.IO.StreamReader streamReaderを実行されると
「ログオン失敗:ユーザ名を認識できないかまたはパスワードが間違っています。」
とエラーになってします。
WNetAddConnection3でのログオン自体がうまくできていないのでしょうですが、
どうすればよいのかがわかりません。
(ちなみにWNetAddConnection2でやってみても同様です)
どなたか教えていただけないでしょうか?
いろいろなページは参考にさせていただいているのですが、
知識が足らず読み解くことができないので、
できればサンプルコード等を教えていただけると助かります。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
NETRESOURCE構造体の定義が違うからでしょう
メンバーが足りないのです
public struct NETRESOURCE
{
public int dwScope; // Added
public int dwType;
public int dwDisplayType; // Added
public int dwUsage; // Added
public string lpLocalName;
public string lpRemoteName;
public string lpComment; // Added
public string lpProvider;
}
メンバーが足りないためにAPIの中で違う場所を参照してしまうため共有資源の名前が受け取れていないのです
VS2005付属のMSDNなどで NETRESOUSE構造体を確認しましょう
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/wnet/wnet/netresource_str.htm
この回答への補足
早速のご回答、ありがとうございます。
MSDNにある「WNetAddConnection3 関数は、 構造体の上記以外のメンバを無視します。」
というのは宣言をしなくてもいいということではないのですね。
教えていただいた通りに定義をして、特に値を設定することなく実行しました。
WNetAddConnection3の戻り値が「1208」になりましたが、以降は同じエラー結果です。
また、C#で関係するかわかりませんでしたが、どこかでポインタがどうこうという内容を読んだため、
[StructLayout(LayoutKind.Sequential)]
public struct NETRESOURCE
{
public int dwScope; // Added
public int dwType;
public int dwDisplayType; // Added
public int dwUsage; // Added
[MarshalAs(UnmanagedType.LPWStr)]
public string lpLocalName;
[MarshalAs(UnmanagedType.LPWStr)]
public string lpRemoteName;
[MarshalAs(UnmanagedType.LPWStr)]
public string lpComment; // Added
[MarshalAs(UnmanagedType.LPWStr)]
public string lpProvider;
}
で実行してみたところ
WNetAddConnection3の戻り値が「67」になり、以降は同じエラー結果です。
他にはどこを気をつけたほうがいいのでしょうか?
また、WNetAddConnection3の戻り値の内容がどのようなエラーを指しているのかがわかるサイト等を教えていただけたらと思います。
以上、よろしくお願いいたします。
申し訳ありません。
パスワードが間違っていただけのようです。
教えていただいた構造体で正しく動作しました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
WNetAddConnection2がエラーなぜ?
C言語・C++・C#
-
WNetAddConnection*()の使い方
Visual Basic(VBA)
-
WNetAddConnection2で困っています
C言語・C++・C#
-
-
4
プログラム内でネットワークドライブを指定して接続することは可能でしょうか?
C言語・C++・C#
-
5
ネットワーク上のフォルダにアクセスする
Visual Basic(VBA)
-
6
winnetwk.hについて
C言語・C++・C#
-
7
C#で、WinAPIのWNetAddConnection3と同じような機能を実装するには?
C言語・C++・C#
-
8
【C#】DataGridViewの最大列数について
システム
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
java のstruts1.3です。
-
typeid演算子を使用すると警告...
-
エンターキーを押すとOKボタン...
-
ボタンのイベントで異なるウィ...
-
ボタンの複数割り当てについて
-
C#でキーイベントが発生しない...
-
C# 矢印キーの取得
-
書式の設定
-
シリアル通信で受信したデータ...
-
C#でのWNetAddConnection3の使...
-
androidプログラミングについて...
-
C#単体テストで、UnitTestの使...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
VBAで配列の計算
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、あるクラスのメンバーす...
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
Processingでマウスクリックで...
-
C#でのWNetAddConnection3の使...
-
ボタンのイベントで異なるウィ...
-
C#で別のFormへ複数の値を返そ...
-
GetDIBits関数の使い方について
-
【Java】画像表示が出来ない!
-
ボタンの複数割り当てについて
-
Thread.sleepのInterruptedExce...
-
C# MouseHoverを何度も呼ぶには
-
C# DataGridView列カスタマイズ
-
正規表現
-
unityでのC++エラーの原因がわ...
-
C# visibleプロパティをfalseに...
-
C# 矢印キーの取得
-
C#から、C++で作成したdll内の...
-
C#でキーイベントが発生しない...
-
JavaFXでの表内のチェックボッ...
おすすめ情報