我想将文件从本地驱动器复制到共享网络路径。
我尝试过以下方式:
string remoteUserName =
WebConfigurationManager.AppSettings["remoteUsername"].ToString();
string remotePassword =
WebConfigurationManager.AppSettings["remotePassword"].ToString();
string remoteDomain =
WebConfigurationManager.AppSettings["remoteDomain"].ToString();
string remoteFilePath =
WebConfigurationManager.AppSettings["remoteFilePath"].ToString();
using (var impersonation = new
ImpersonatedUser(remoteUserName, remoteDomain, remotePassword))
{
CreateErrorLog("Logged in successfully - User and password are correct.",
"Action" + " - " + "controllerName");
string filePath = remoteFilePath;
string fileName = "txt.txt";
StreamWriter SW1;
FileIOPermission myPerm = new
FileIOPermission(FileIOPermissionAccess.AllAccess, filePath + fileName);
myPerm.Assert();
SW1 = System.IO.File.CreateText(filePath + fileName);
}
答案 0 :(得分:0)
网络路径由完整的通用命名约定-UNC \\Server\Share\drive\file
路径访问。如果您拥有这些类型凭据或访问网络的权限,则可以使用 File.Copy 方法移动文件。
答案 1 :(得分:0)
好的,让我们稍微研究一下这段代码。首先,让我们简化构建路径。我们有一个网络路径和一个本地路径。根据您当前的代码,网络路径是使用一些变量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);
好吧,我们几乎就在那里,但我们还有另一种网络路径:
var alternativeNetworkPath = Path.Combine(@"\\atlanta2-0\it-documents\filestroage",
comboBox1.SelectedItem as string,
comboBox2.SelectedItem as string,
Environment.UserName,
label5.Text);
现在,关于这条道路的一件事已经让我怀疑的是,\ filestroage,实际上拼错了。现在,如果文件夹拼写那么好,但我想知道它是否拼写错误。所以,看看吧。好吧,让我们继续,现在我们已经建立了所有三条路径,它更容易阅读,我们可以轻松输出这些字符串以确保它们是正确的。我们来看看逻辑。它说,如果networkPath存在然后将其保存在那里,但是,如果它不存在则创建它并将其保存到alternativeNetworkPath。所以,让我们这样做:
if (Directory.Exists(networkPath))
{
File.Copy(localPath, networkPath);
}
else
{
Directory.CreateDirectory(networkPath);
File.Copy(localPath, alternativeNetworkPath);
}
好吧,简单就是吗?但是您说Directory.Exists即使存在也会返回true。非常期待的不是吗?如果目录存在,那么此方法肯定会返回true,否则返回false。然后,您使用Directory.CreateDirectory声明上面的行表示无法找到网络名称 - 这只能表示路径构造错误。
因此,在分解之后,底线是这样,正在构建的路径必须脱离tidge。但是,使用这个新模型,您应该能够轻松地将这些路径拉出来。因此,在我看来,整个方法看起来像这样:
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);
}
所以现在让我们看一下这些变量中的那些路径,你的问题就应该出来了。