0

我有以下代码来执行 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 可能并非如此。

我该如何解决这个问题?

4

1 回答 1

1

路径似乎是正确的。然而:

  1. URL 首先对文件名进行编码以转义任何无效字符。
  2. 代码/在文件夹和文件名之间缺少斜杠 ( )。这可能会导致路径无效,导致它写入根文件夹。
  3. 使用 using 或 try...finally 块来关闭各种流,以防引发异常。
  4. 使用 stream.CopyTo(请参阅如何将一个流的内容复制到另一个流?)而不是读取整个文件。如果文件特别大,这可能会出现问题。

问题可能出在 FTP 服务器配置方面。FTP 服务器似乎将文件系统的根文件夹用作其根文件夹,这是一种不好的做法。FTP 服务器应该只提供文件应该下载或上传到的文件夹。但是,这可能是您正在使用的嵌入式 Linux 上的配置功能。

于 2012-09-06T06:25:48.010 回答