以本地用户写文件出错

本文关键字:文件 出错 用户 | 更新日期: 2023-09-27 18:14:59

当尝试以本地用户(即,不以admin身份运行)下载和写入文件时,以下代码抛出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;
    }

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

以本地用户写文件出错

我刚刚对你的代码做了一个单元测试。

问题是

  destStream = File.Create(dstFile);

这是一个文件夹而不是文件!

试试这个:

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

和tadaaaaa。没有例外;)

不能写入文件夹。

,必要时请使用using():)

单元测试:

     [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;
            }