よし、このコードに少し手を加えてみましょう。まず、パスの構築を単純化しましょう。ネットワーク パスとローカル パスがあります。現在のコードによると、ネットワーク パスはいくつかの変数comboBox1
、comboBox2
、およびEnvironment.UserName
で構築されているため、少し異なる方法で実行してみましょう。
var networkPath = Path.Combine(@"\\network",
comboBox1.SelectedItem as string,
comboBox2.SelectedItem as string,
Environment.UserName);
これ\
により、これらの各文字列の間に適切に配置されます (つまり、バック スラッシュが既に存在する場合は追加されませんが、必要に応じて追加されます)。
次に、ローカル パスに対して同じことを行います。
var localPath = Path.Combine(@"C:\Users",
Environment.UserName,
"test",
label5.Text);
OK、あと少しですが、別のネットワーク パスもあります。
var alternativeNetworkPath = Path.Combine(@"\\atlanta2-0\it-documents\filestroage",
comboBox1.SelectedItem as string,
comboBox2.SelectedItem as string,
Environment.UserName,
label5.Text);
さて、このパスについて私がすでに疑っていることの 1 つは、\filestroage
実際にはスペルが間違っていることです。さて、フォルダのスペルが正しい場合は問題ありませんが、スペルが間違っているのではないかと思います。だから見てください。よし、続けましょう。これで 3 つのパスすべてが作成されました。少し読みやすくなり、これらの文字列を簡単に出力して、それらが正しいことを確認できます。ロジックを見てみましょう。が存在する場合はnetworkPath
そこに保存しますが、存在しない場合は作成してに保存しますalternativeNetworkPath
。それでは、それをしましょう:
if (Directory.Exists(networkPath))
{
File.Copy(localPath, networkPath);
}
else
{
Directory.CreateDirectory(networkPath);
File.Copy(localPath, alternativeNetworkPath);
}
わかりました、簡単ですよね?しかし、あなたはDirectory.Exists
が true を返していると述べましたeven if it exists
。それはかなり期待されていますよね?ディレクトリが存在する場合、このメソッドは確実に戻ります。存在true
しない場合は戻りfalse
ます。次に、パスが間違って作成されたことを意味するだけであると述べDirectory.CreateDirectory
ましたThe line above says the network name cannot be found
。
したがって、それを分解した後、結論はこれです。構築されているパスは、少しずれている必要があります。ただし、この新しいモデルを使用すると、これらのパスをより簡単に引き出すことができるはずです。したがって、私の考えでは、メソッド全体は次のようになります。
var networkPath = Path.Combine(@"\\network",
comboBox1.SelectedItem as string,
comboBox2.SelectedItem as string,
Environment.UserName);
var localPath = Path.Combine(@"C:\Users",
Environment.UserName,
"test",
label5.Text);
var alternativeNetworkPath = Path.Combine(@"\\atlanta2-0\it-documents\filestroage",
comboBox1.SelectedItem as string,
comboBox2.SelectedItem as string,
Environment.UserName,
label5.Text);
if (Directory.Exists(networkPath))
{
File.Copy(localPath, networkPath);
}
else
{
Directory.CreateDirectory(networkPath);
File.Copy(localPath, alternativeNetworkPath);
}
それでは、これらの変数のパスを見てみましょう。問題はすぐに解決するはずです。