当尝试以本地用户身份下载和写入文件(即,不以管理员身份运行)时,以下代码抛出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文件夹,所以我很难理解为什么这不起作用。
答案 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;
}