在嵌入式Linux上指定FTP传输目录

时间:2012-09-06 05:47:32

标签: c# .net ftp

我有以下代码来执行FTP文件:

    private bool InitFTPTransfer(string filePath)
    {
        Uri ipAddress = new Uri(ddcdao.ddcAddress);

        string ftpAddress = "ftp://10.175.95.11/mnt/flash" +Path.GetFileName(filePath);
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpAddress);
        request.Method = WebRequestMethods.Ftp.UploadFile;

        request.Credentials = new NetworkCredential(Properties.Settings.Default.SysFTPID, Properties.Settings.Default.SysFTPPassword);


        byte[] fileContents = File.ReadAllBytes(filePath);

        request.ContentLength = fileContents.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(fileContents, 0, fileContents.Length);
        requestStream.Close();

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        response.Close();
        return true;
    }

文件传输没有问题,但文件放在根目录上,而不是指定目录(/ mnt / flash)。

我的印象是,在ftp地址中指定一个目录应该正确设置目的地,但对于嵌入式Linux来说可能不是这样。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

路径似乎是正确的。但是:

  1. URL首先编码文件名以转义任何无效字符。
  2. 代码在文件夹和文件名之间缺少斜杠(/)。这可能导致路径无效,导致其写入根文件夹。
  3. 使用或尝试使用... finally块来关闭各种流,以防万一抛出异常。
  4. 使用stream.CopyTo(请参阅How do I copy the contents of one stream to another?)而不是读取整个文件。如果文件特别大,可能会出现问题。
  5. 问题可能出在FTP服务器配置端。 FTP服务器似乎将文件系统的根文件夹作为其根文件夹提供,这是一种不好的做法。 FTP服务器应该只提供应下载或上传的文件夹文件。但是,这可能是您正在使用的嵌入式Linux上的配置功能。<​​/ p>