我正在使用FtpWebRequest
从ftp下载我的文件。但是,当应用程序转到我声明要将文件写出的行FileStream
时。
以下是我的下载功能:
public void Download(List <string> path)
{
try
{
string timenow = DateTime.Today.Year.ToString() + "_" + DateTime.Today.Month.ToString() + "_" + DateTime.Today.Day.ToString() + "_" + DateTime.Today.Hour.ToString() + "_" + DateTime.Today.Minute.ToString() + "_" + DateTime.Today.Second.ToString();
DirectoryInfo dir = new DirectoryInfo(@"C:\StudySystemFile\" + timenow);
if (!dir.Exists)
dir.Create();
foreach (string p in path)
{
FtpWebRequest request;
request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftp.Hostname + p));
request.Credentials = new System.Net.NetworkCredential(ftp.FtpAccount, ftp.FtpPassword);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.KeepAlive = false;
request.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream reader = response.GetResponseStream();
FileStream file = new FileStream(@"C:\StudySystemFile\" + timenow, FileMode.Create, FileAccess.ReadWrite);
byte[] buffer = new byte[1024];
int bytesRead = reader.Read(buffer, 0, buffer.Length);
while (bytesRead > 0)
{
file.Write(buffer, 0, bytesRead);
bytesRead = reader.Read(buffer, 0, buffer.Length);
}
reader.Close();
file.Close();
response.Close();
Console.WriteLine(p);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:0)
运行程序的用户无权在C:\StudySystemFile\
创建文件,检查文件夹是否存在以及程序运行的任何用户都可以在没有UAC提示的情况下在那里创建文件。
可能发生的事情是当您使用Create()
创建文件夹时,它继承了C:\
的权限,该权限没有文件的写入权限,您只能获得文件夹创建权限。
您需要在程序外部创建文件夹,或者在致电Create()
时需要set the permissions。
答案 1 :(得分:0)
您必须获得UnauthorizedAccessException
。操作系统因I / O错误或特定类型的安全错误而拒绝访问时引发的异常。
这显然是权限问题。
对于Vista / Windows 7/8,C:\
驱动器被视为系统驱动器,并且需要您的进程的管理员权限才能直接在其下创建文件。
尝试使用管理员或Run Visual Studio as Administrator
运行您的流程,它应该可以正常运行。
答案 2 :(得分:0)
您的应用程序无权写入该目录。您可以通过右键单击项目并添加新的Application Manifest File
来强制执行UAC提示。在此文件中,替换
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
与
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
更好的想法是写入不需要管理员权限的目录。
答案 3 :(得分:0)
您使用的是什么版本的Framework?你使用什么安装/启动方法? (即,clickonce)和其他建议的海报一样,您是否检查了C:驱动器上该文件夹的权限?右键单击该文件夹并检查安全性选项卡,确保登录用户已修改以及对该文件夹的读取权限。
如果您只是暂时需要该文件,那么请查看写入IsolatedStorage。 How to store and retrieve data in Isolated Storage File?