以本地用户写文件出错
本文关键字:文件 出错 用户 | 更新日期: 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;
}