使用c#将文件从本地驱动器复制到共享驱动器
本文关键字:驱动器 复制 共享 文件 使用 | 更新日期: 2023-09-27 18:03:26
我想将一个文件从我的本地驱动器复制到一个共享的网络路径。
我试过以下方法:
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);
}
好,让我们稍微处理一下这段代码。首先,让我们简化路径的构建。我们有一个网络路径和一个本地路径。根据您当前的代码,网络路径是用几个变量comboBox1、comboBox2和Environment构建的。UserName,所以我们用不同的方式:
var networkPath = Path.Combine(@"''network",
comboBox1.SelectedItem as string,
comboBox2.SelectedItem as string,
Environment.UserName);
将' in正确地放置在每个字符串之间(即,如果已经有反斜杠,它不会添加一个,但在必要时添加)。
现在让我们对本地路径做同样的事情:
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);
}
很简单,对吧?但你说过指南。Exists返回true,即使它存在。这是意料之中的,不是吗?如果目录存在,则此方法肯定会返回true,如果不存在,则返回false。然后你向指南声明。上面这行说找不到网络名——这只能说明路径构造错误。
所以在分解之后,底线是这样的,正在构建的路径必须在一个小尖上。然而,使用这个新模型,您应该能够更容易地将这些路径拉出来。在我看来,整个方法应该是这样的:
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);
}
那么现在让我们来看看这些变量中的路径你的问题应该就出来了
通过完整的通用命名约定- unc ''Server'Share'drive'file
路径访问网络路径。如果您有这些类型的凭据或访问网络的权限,您可以使用File。复制方法移动文件