如何在上传文件后重命名文件

3

我需要使用FTP协议将文件上传到服务器,并在上传后重命名已上传的文件。

我可以上传文件,但不知道如何重命名。

代码如下:

FtpWebRequest requestFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServer + "/" + "httpdocs/webroot/" + destination + "/" + fileName));
requestFTP.Proxy = null;

requestFTP.Credentials = new NetworkCredential(ftpUser, ftpPassword);
requestFTP.Method = WebRequestMethods.Ftp.UploadFile;
FileStream fStream = fileInfo.OpenRead();
int bufferLength = 2048;
byte[] buffer = new byte[bufferLength];
Stream uploadStream = requestFTP.GetRequestStream();
int contentLength = fStream.Read(buffer, 0, bufferLength);
while (contentLength != 0)
{
  uploadStream.Write(buffer, 0, contentLength);
  contentLength = fStream.Read(buffer, 0, bufferLength);
}
uploadStream.Close();
fStream.Close();

requestFTP = null;

string newFilename = fileName.Replace(".ftp", "");
requestFTP.Method = WebRequestMethods.Ftp.Rename; // this like makes a problem
requestFTP.RenameTo(newFilename);

我遇到的错误是

错误2 非可调用成员'System.Net.FtpWebRequest.RenameTo'不能像方法一样使用。


MethodRename 都是字符串,它们不是函数。 - default
C# 没有提供直接重命名的方法。您应该在服务器上使用新名称复制文件并删除旧文件。 - user586399
2个回答

13

RenameTo是一个属性,而不是一个方法。你的代码应该这样写:

// requestFTP has been set to null in the previous line
requestFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServer + "/" + "httpdocs/webroot/" + destination + "/" + fileName));
requestFTP.Proxy = null;
requestFTP.Credentials = new NetworkCredential(ftpUser, ftpPassword);

string newFilename = fileName.Replace(".ftp", "");
requestFTP.Method = WebRequestMethods.Ftp.Rename;
requestFTP.RenameTo = newFilename;
requestFTP.GetResponse();

-1
为什么不直接使用正确的文件名上传呢?将你的第一行改成你真正想要的文件名即可。
FtpWebRequest requestFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServer + "/" + "httpdocs/webroot/" + destination + "/" + newFileName));

但请确保从您的旧文件名打开读取流。


5
通常使用此方法来告知轮询应用程序文件已完成上传。FTP的乐趣。 - Sam
谢谢,但我确实需要使用一些临时名称复制文件,然后将其重命名为其原始名称。 - user198003
1
为什么不直接回答原帖呢? - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接