在网络共享上保存文件 C# .Net core 3
Save file on a network share C# .Net core 3
我正在尝试将 xml 文件保存到网络共享上,但由于某些未知原因,保存过程停止了。
例如:
我有一个 xml 文档,我想将其另存为
var filename = {guid}.xml
var shareFolder = "\\<my machine\Share";
var filePath = Path.Join(shareFolder,filename);
我检查过
Directory.Exists(shareFolder)
returns 正确 - 因此至少该文件夹存在于共享中。
文件夹的共享权限设置为 "write" 所有人。
我尝试使用
xml.Save(filePath);
File.WriteAllText(filePath, xml.OuterXml);
但得到了类似的结果,即保存过程逐渐停止。
日志也没有告诉我任何信息。
我使用 https://github.com/mj1856/SimpleImpersonation 进行身份验证。
.Net Core 3.1 的最终结果如下所示:
private void Process xml(string xmlInput)
{
var xmlDocument = XDocument.Parse(xmlInput);
var filename = $"{Guid.NewGuid()}.xml";
var filePath = Path.Combine(_outputFolder, filename);
if (filePath.StartsWith("\"))
{
SaveOnNetworkShare(xmlDocument, filePath);
}
else
{
SaveLocally(xmlDocument, filePath);
}
}
private void SaveLocally(XmlDocument xml, string filePath)
{
xml.Save(filePath);
}
private void SaveOnNetworkShare(XmlDocument xml, string filePath)
{
try
{
Impersonation.RunAsUser(_credentials, LogonType.Network, () =>
{
xml.Save(filePath);
});
}
catch (ImpersonationException ex)
{
_logger.LogError(new EventId(-1, "Error saving file"), ex, $"Could not save file to filepath {filePath}");
}
}
我正在尝试将 xml 文件保存到网络共享上,但由于某些未知原因,保存过程停止了。
例如: 我有一个 xml 文档,我想将其另存为
var filename = {guid}.xml
var shareFolder = "\\<my machine\Share";
var filePath = Path.Join(shareFolder,filename);
我检查过
Directory.Exists(shareFolder)
returns 正确 - 因此至少该文件夹存在于共享中。
文件夹的共享权限设置为 "write" 所有人。
我尝试使用
xml.Save(filePath);
File.WriteAllText(filePath, xml.OuterXml);
但得到了类似的结果,即保存过程逐渐停止。 日志也没有告诉我任何信息。
我使用 https://github.com/mj1856/SimpleImpersonation 进行身份验证。
.Net Core 3.1 的最终结果如下所示:
private void Process xml(string xmlInput)
{
var xmlDocument = XDocument.Parse(xmlInput);
var filename = $"{Guid.NewGuid()}.xml";
var filePath = Path.Combine(_outputFolder, filename);
if (filePath.StartsWith("\"))
{
SaveOnNetworkShare(xmlDocument, filePath);
}
else
{
SaveLocally(xmlDocument, filePath);
}
}
private void SaveLocally(XmlDocument xml, string filePath)
{
xml.Save(filePath);
}
private void SaveOnNetworkShare(XmlDocument xml, string filePath)
{
try
{
Impersonation.RunAsUser(_credentials, LogonType.Network, () =>
{
xml.Save(filePath);
});
}
catch (ImpersonationException ex)
{
_logger.LogError(new EventId(-1, "Error saving file"), ex, $"Could not save file to filepath {filePath}");
}
}