将文件写为本地用户时出错

时间:2016-10-26 16:33:20

标签: c# windows-10

当尝试以本地用户身份下载和写入文件(即,不以管理员身份运行)时,以下代码抛出UnauthorizedAccessException(拒绝访问路径)。最初,我认为这是由于应用程序试图将文件直接写入C盘。但是,在尝试将文件保存到本地用户的文档驱动器时,我收到同样的错误,如下所示:

Environment.GetFolderPath(Environment.SpecialFolder.Personal);

这似乎是一个特定于Windows 10的问题,因为应用程序在以前的Windows版本中运行良好(甚至直接写入C://作为本地用户,我原以为会被阻止)。

private bool DownloadFile(Stream srcStream, string dstFile)
    {
        bool success = false;
        byte[] buffer = new byte[16384];
        int byteCount;
        FileStream destStream = null;
        try
        {
            destStream = File.Create(dstFile);
            while ((byteCount = srcStream.Read(buffer, 0, 16384)) != 0)
            {
                destStream.Write(buffer, 0, byteCount);
            }
            success = true;
        }
        catch(Exception)
        {
            return success;
        }
        finally
        {
            try { destStream.Close(); }
            catch (Exception) { }
        }
        return success;
    }

我已经检查过了,本地用户帐户可以完全访问他们的Documents文件夹,所以我很难理解为什么这不起作用。

1 个答案:

答案 0 :(得分:1)

好的,我刚刚用您的代码进行了单元测试。

问题是

  destStream = File.Create(dstFile);

这是文件夹而不是文件

试试这个:

destStream = File.Create(dstFile + "\Test.txt");

和tadaaaaa。没有例外;)

您无法写入文件夹。只在文件内。

请在需要时使用()<)>

单元测试:

     [TestMethod]
            public void TestMethod1()
            {
                var path = Environment.GetFold`enter code here`erPath(Environment.SpecialFolder.Personal);
// path = "C:\Users\pix\Documents"
                using (var memoryStream = new MemoryStream())
                {
                    var result = DownloadFile(memoryStream, path);
                    Assert.IsFalse(result);
                    result = DownloadFile(memoryStream, Path.Combine("FILE.txt"));
                    Assert.IsTrue(result);
                }
            }

            private bool DownloadFile(Stream srcStream, string dstFile)
            {
                bool success = false;
                byte[] buffer = new byte[16384];
                int byteCount;
                FileStream destStream = null;
                try
                {
                    destStream = File.Create(dstFile);
                    while ((byteCount = srcStream.Read(buffer, 0, 16384)) != 0)
                    {
                        destStream.Write(buffer, 0, byteCount);
                    }
                    success = true;
                }
                catch (Exception ex)
                {
                    return success;
                }
                finally
                {
                    try { destStream.Close(); }
                    catch (Exception) { }
                }

                return success;
            }