【解決方法】C# で共有フォルダー内にフォルダーを作成する方法

[ad_1]

やあみんな、
EVERYONE パーミッションでフォルダーを剪断し、読み取りと書き込みのパーミッションを付与し、以下のコードを使用してその中に新しいフォルダーを作成しようとしましたが、エラーが発生し、プロジェクト ファイル内のドキュメント/アプリデータにフォルダーが作成されました。問題を解決します。 ありがとう

私が試したこと:

string targetPath = “\\\\MANAGER\\Archive Documents\\” + txtgetID.Text + ” ” + txtNumberB.Text + ” ” + txtDateB.Text;
if (!Directory.Exists(“\\\\MANAGER\\Archive Documents\\” + Directory.CreateDirectory(“\\\\MANAGER\\Archive Documents\\” + txtgetID.Text + ” ” + txtNumberB.テキスト + ” ” + txtDateB.Text)))
{
Directory.CreateDirectory(“\\\\MANAGER\\Archive Documents\\” + Directory.CreateDirectory(“\\\\MANAGER\\Archive Documents\\” + txtgetID.Text + ” ” + txtNumberB.Text + ” ” + txtDateB.Text));
}
それ以外
{
foreach (新しい DirectoryInfo(sourcePath).GetFiles(fileName) 内の var ファイル)
{
file.MoveTo(Path.Combine(targetPath, file.Name));
}
}

解決策 1

まず、ディレクトリ名を何度も生成するのをやめて、最初に使用した 1 つの文字列を使用します。

次に、問題が何であるかがより明確になります。

C#
if (!Directory.Exists("‪\\\\MANAGER\\Archive Documents\\" + Directory.CreateDirectory("‪\\\\MANAGER\\Archive Documents\\" + txtgetID.Text + " " + txtNumberB.Text + " " + txtDateB.Text)))

チェックしている監督名について考えてください。
Directory.CreateDirectory メソッド (System.IO) | マイクロソフト ラーン[^] DirectoryInfo 構造体を返し、暗黙的な ToString 実装はフォルダーの完全なパスを返します。これは、チェックしているフォルダーに 2 つのルート要素があることを意味します。

C#
"\\\\MANAGER\\..." + "\\\\MANAGER\\..."

そのコードを破棄して、最初からやり直すべきだと思います…

解決策 2

これは一体何ですか?

C#
if(!Directory.Exists("‪\\\\MANAGER\\Archive Documents\\" + Directory.CreateDirectory("‪\\\\MANAGER\\Archive Documents\\" + txtgetID.Text + " " + txtNumberB.Text + " " + txtDateB.Text)))

Directory.Exists() は true/false 値を返しますが、これを .Text 文字列に追加しても意味がありません。 Directory.CreateDirectory は文字列を返しませんが、DirectoryInfo オブジェクトを返します。 では、if ステートメントで評価可能な結果は言うまでもなく、 true + .Text + DirectoryInfo はどのように意味をなすのでしょうか?

また、文字列連結を使用すると、コードのデバッグが非常に難しくなります。 代わりに補間を試してください。

そして、あなたのelse句は意味がありません。 ディレクトリが存在しない場合は、それを「作成」しますが、その後は何もしません。 コードが if ステートメントに到達するまでにディレクトリが存在しない限り、else 句は実行されません。

C#
string targetPath = $@"\\MANAGER\Archive Documents\{txtgetID.Text} {txtNumberB.Text} {txtDateB.Text}";
if (!Directory.Exists(targetPath))
{
    Directory.Create(targetPath);
}

foreach (var file in new DirectoryInfo(sourcePath).GetFiles(fileName))
{
    string targetFilepath = Path.Combine(targetPath, file.Name);
    file.MoveTo(targetFilepath);
}

[ad_2]

コメント

タイトルとURLをコピーしました