0

我正在使用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);
            }
        }
4

4 回答 4

0

您一定会得到UnauthorizedAccessException。当操作系统由于 I/O 错误或特定类型的安全错误而拒绝访问时引发的异常。

这显然是一个权限问题

在 Vista/Windows 7/8 的情况下,C:\驱动器被视为系统驱动器,并且需要您的进程的管理员权限才能直接在其下创建文件。

尝试使用管理员或 运行您的进程Run Visual Studio as Administrator,它应该可以工作。

于 2013-06-19T18:42:00.823 回答
0

您的应用程序无权写入该目录。您可以通过右键单击您的项目并添加一个新的Application Manifest File. 在这个文件中,替换

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

一个更好的主意是写入不需要管理员权限的目录。

于 2013-06-19T18:42:15.653 回答
0

您使用的是什么版本的框架?您使用什么安装/启动方法?(即clickonce)就像其他海报建议的那样,您是否检查过C:驱动器上该文件夹的权限?右键单击文件夹并检查安全选项卡,确保登录用户具有对该文件夹的修改和读取权限。

如果您只需要临时使用该文件,请考虑写入到 IsolatedStorage。 如何在独立存储文件中存储和检索数据?

于 2013-06-19T18:44:00.800 回答
0

运行程序的用户在C:\StudySystemFile\检查文件夹是否存在时无权创建文件,以及程序运行的任何用户都可以在没有 UAC 提示的情况下在那里创建文件。

可能发生的情况是,当您创建文件夹时,Create()它继承了C:\没有文件写入权限的权限,您只能获得文件夹创建权限。

您要么需要在程序外部创建文件夹,要么在调用Create()时需要设置权限

于 2013-06-19T18:39:14.283 回答