質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

8201閲覧

C#でネットワークフォルダにフォルダが作成できない

rimbaud_t

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/06/26 01:12

前提・実現したいこと

c#を利用してASP.NET.COREでネットワークフォルダに新たにフォルダ作成を
しようとしています。

発生している問題・エラーメッセージ

ネットワークフォルダはドメインに参加しているので、WIN32のdllを利用して
認証は成功していますが、その先に新たに日付フォルダを作成しようとすると
「ユーザー名またはパスワードが正しくありません」と表示されていまいます。

エラーメッセージ ユーザー名またはパスワードが正しくありません。

該当のソースコード

// 認証情報を使って接続するWin32 API宣言 [DllImport ("mpr.dll", EntryPoint = "WNetCancelConnection2", CharSet = System.Runtime.InteropServices.CharSet.Unicode)] private static extern int WNetCancelConnection2 (string lpName, Int32 dwFlags, bool fForce); // 認証情報を使って接続するWin32 API宣言 [DllImport ("mpr.dll", EntryPoint = "WNetAddConnection2", CharSet = System.Runtime.InteropServices.CharSet.Unicode)] private static extern int WNetAddConnection2 (ref NETRESOURCE lpNetResource, string lpPassword, string lpUsername, Int32 dwFlags); // WNetAddConnection2に渡す接続の詳細情報の構造体 [StructLayout (LayoutKind.Sequential)] internal struct NETRESOURCE { public int dwScope; //列挙の範囲 public int dwType; //リソースタイプ public int dwDisplayType; //表示オブジェクト public int dwUsage; //リソースの使用方法 [MarshalAs (UnmanagedType.LPWStr)] public string lpLocalName; //ローカルデバイス名。使わないならNULL。 [MarshalAs (UnmanagedType.LPWStr)] public string lpRemoteName; //リモートネットワーク名。使わないならNULL [MarshalAs (UnmanagedType.LPWStr)] public string lpComment; //ネットワーク内の提供者に提供された文字列 [MarshalAs (UnmanagedType.LPWStr)] public string lpProvider; //リソースを所有しているプロバイダ名 }

try {
//既に接続してる場合があるので一旦切断する
ret = WNetCancelConnection2 (backupPath, 0, true);
//共有フォルダに認証情報を使って接続
ret = WNetAddConnection2 (ref netResource, password, userId, 0);

System.Console.WriteLine ("connected successfully...");

} catch (Exception) { }

// 当日バックアップ用フォルダ作成
var today = DateTime.Now;
var todayFolder = today.ToString ("yyyyMMdd");
var destPathParent = System.IO.Path.Combine (new [] { backupPathToSource, todayFolder });

Console.WriteLine (destPathParent);

//コピー先のディレクトリがないときは作る
try {
if (!System.IO.Directory.Exists (destPathParent)) {
System.IO.Directory.CreateDirectory (destPathParent);
Console.WriteLine ("Created Directory.." + destPathParent);
}
catch (Exception ex) {
Console.WriteLine ("----" + ex.Message);
}

試したこと

DirectorySecurityというメソッドがあるようで使ってみようとしましたが、
作成されていないフォルダに設定できるはずもなく、結局解決できませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/06/26 01:15

フォルダを作成する権限がないのではないでしょうか。
退会済みユーザー

退会済みユーザー

2020/06/26 02:28

ASP.NET の話なら ASP.NET のタグをつけてください。ASP.NET と言っても MVC, Razor ページ, Web API といろいろあります。何を作っているか質問欄を編集して追記してください。あと、開発環境(Visual Studio, Core のバージョンなど)も追記してください。 コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。インデントされてないコードはあなた自身も読む気がしないのでは? 質問者さんは ASP.NET の開発経験はあるのですか? ワーカープロセスのアクセス権と言って話が通じますか? CORE の場合はデプロイする環境・方法でいろいろ話が違ってくるのは理解してますか?
rimbaud_t

2020/06/26 03:55

表示についてはすみませんでした。プログラム経験初心者ということと、サイトに初めて投稿させていただいたので要領を得ていませんでした。開発環境はASP.NET ではなくて .NET Core SDK 3.1.201 を使って作成したものです。単純にフォルダのバックアップをしたいと考えてました。 c#は初心者のためネットワークフォルダへの接続方法等サイト等で調べたものを使用して試行しています。「CORE の場合はデプロイする環境・方法でいろいろ話が違ってくる」ということは理解していまえんでした。あまり専門的になるようでしたら現状の私の理解では難しいので今回はあきらめます。 C#への理解を
Zuishin

2020/06/26 03:57

バックアップなら、C# の理解ではなく OS の理解が必要です。
退会済みユーザー

退会済みユーザー

2020/06/26 04:00

> 開発環境はASP.NET ではなくて 質問本文に「ASP.NET.COREでネットワークフォルダに新たにフォルダ作成をしようとしています」と書いてありますが、どういうことですか? ASP.NET Web アプリでなければ、一体何を作っているのでしょう?
退会済みユーザー

退会済みユーザー

2020/06/26 04:03

「コードは ``` と ``` で囲ってください」とお願いしたのですがやってもらえませんか? インデントされてないコードはあなた自身も読む気がしないのでは? 赤の他人の回答者・閲覧者はなおさらです。
退会済みユーザー

退会済みユーザー

2020/06/26 09:45

質問者さん、上のコメントは無視して、スレッドを放り出してしまったのかな? 回答者・閲覧者に失礼ではないかと思うのですが・・・
guest

回答1

0

ベストアンサー

書き込み権限がなくて失敗してるように見えますが、そこらへんどうなんでしょうか

投稿2020/06/26 01:27

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rimbaud_t

2020/06/26 03:58

最初に申し上げた開発環境はASP.NET ではなくて .NET Core SDK 3.1.201 を使って作成したものでした。申し訳ありませんでした。c#初心者のため基本的なことがひょっとしたら抜けているかもしれませんが、ネットワークフォルダの接続先の親フォルダまでのログインは出来たのですが、その先に新しくフォルダを作成しようとしたところ「ユーザーまたはパスワードが・・」と表示されたのですが、親フォルダまでは使用しているアカウントの書き込み権限はありました。よろしくお願いします。
len_souko

2020/06/26 04:17

接続先のPCでコンピューターの管理を開いて、左メニュー「共有フォルダー => セッション」で実際にアクセスしているアカウントを確認してみましたか? そのアカウントで共有フォルダの権限は参照だけにしかなっていないのではありませんか?
rimbaud_t

2020/06/26 08:06

ありがとうございました。確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問