我真的很难将数据保存到我的本地网络NAS(如果重要的是Synology DS214)。
我需要在我的程序的另一部分创建一些文件后将其存储在我的网络文件夹中,但我无法正确处理身份验证/权限。
我的代码atm是这样的:
WrapperImpersonationContext WIContext =
new WrapperImpersonationContext("\\\\DiskStation", "admin", "admin");
try
{
WIContext.Enter();
// code to select the final path simplified.
string fileName = "file.txt";
string originalPath = Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments);
originalPath= Path.Combine(new string[] {originalPath, fileName});
string finalPath = "\\\\DiskStation\\Virtual\\DestFolder";
if (!Directory.Exists(finalPath))
{
// This goes well for whatever reason
Directory.CreateDirectory(finalPath);
}
finalPath = Path.Combine(new string[] {finalPath, fileName});
// This fails for wrong username/password
File.Move(originalPath, finalPath);
} catch (Exception ex)
{
// Exception showing simplified here
MessageBox.Show(ex.ToString());
throw;
} finally
{
WIContext.Leave();
}
用于WrapperImpersonationContext
的代码我在这里找到:WindowsImpersonationContext made easy
正如我在我的代码中写的那样,当我尝试移动文件时,我得到了一个UnauthorizedAccessException: Access to the path is denied.
我也尝试在网络文件夹中创建一个具有相同结果的新文件。
在查看上面链接的Michiel Vanotegem代码时,我发现我在调用LogonUser
函数时遇到了验证错误(错误代码1326让我得到了Win32Exception (0x80004005): The user name or password is incorrect
)。
我试图使用WNetUseConnection
函数查看this和this页面,但我没有从函数中得到错误(在Michiel代码中替换它之后),当我尝试移动文件时,我得到相同的UnauthorizedAccessException: Access to the path is denied.
我也试图摆弄传递给Impersonation Wrapper的域名,但我似乎无法使它工作。我觉得我错过了什么......有人可以指出我正确的方向或帮助我解决这个问题吗?
Ty所有提前贡献的人。
编辑15/12/2017 11:52:我发现如果我尝试在第一次错误后立即重新运行LogonUser
函数,我会得到一个不同的异常(错误87 Win32Exception (0x80004005): The parameter is incorrect
)
我跟着@LennartStoop建议,所以我使用从using
回答的代码将我的代码包含在try finally
块而不是this中:
using (NetworkConnection netConn =
new NetworkConnection("\\\\DiskStation", new NetworkCredential("admin", "admin")))
{
// My code here
}
使用这个我已经能够建立一个连接网络文件夹并执行我需要的所有IO操作所以ty非常多的小费Lennart :)