将文件保存在网络共享C#.Net core 3中

问题描述 投票:0回答:1

我正在尝试将xml文件保存在网络共享上,但是由于某些未知原因,保存过程暂停了。

例如:我有一个XML文档,我想另存为

var filename = {guid}.xml
var shareFolder = "\\\\<my machine\\Share";
var filePath = Path.Join(shareFolder,filename);

我已经检查过

Directory.Exists(shareFolder)

返回true-因此至少该文件夹存在于共享中。

对所有人的文件夹共享权限设置为“写”。

我尝试使用

xml.Save(filePath); 
File.WriteAllText(filePath, xml.OuterXml);

但是在保存过程停顿下来的情况下却得到了类似的结果。日志也没有告诉我任何事情。

c# .net-core unc
1个回答
0
投票

我使用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}");
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.