问题描述
当我尝试从ftp(有权访问)下载一个项目时,我得到System.NotSupportedException:给定路径的格式不支持。在System.Security.Util.StringExpressionSet。上传似乎工作正常,完成类似地,我将发布以下两个功能: private void下载(string filePath,string fileName)
{
FtpWebRequest reqFTP;
try
{
// filePath =<<要创建文件的完整路径。 >>
// fileName =<<要创建的文件的名称不要在FTP服务器上命名。名称()>>
Label1.Text = filePath +/+ fileName;
FileStream outputStream = new FileStream(filePath +/+ fileName,FileMode.Create);
reqFTP =(FtpWebRequest)FtpWebRequest.Create(new
Uri(ftp://+ ftpServerIP +/+ fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID,ftpPassword);
FtpWebResponse response =(FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte [] buffer = new byte [bufferSize];
readCount = ftpStream.Read(buffer,0,bufferSize);
while(readCount> 0)
{
outputStream.Write(buffer,0,readCount);
readCount = ftpStream.Read(buffer,0,bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch(Exception ex)
{
Label1.Text = ex.ToString();
}
}
public void Upload(string filename)
{
FileInfo fileInf = new的FileInfo(文件名);
string uri =ftp://+ ftpServerIP +/+ fileInf.Name;
FtpWebRequest reqFTP;
//从Uri中创建FtpWebRequest对象
reqFTP =(FtpWebRequest)FtpWebRequest.Create(new Uri(ftp://+ ftpServerIP +/+ fileInf.Name));
//提供WebPermission Credintials
reqFTP.Credentials = new NetworkCredential(ftpUserID,ftpPassword);
//默认情况下,KeepAlive为真,执行命令后控件连接未关闭
//。
reqFTP.KeepAlive = false;
//指定要执行的命令。
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
//指定数据传输类型。
reqFTP.UseBinary = true;
//通知服务器上传文件的大小
reqFTP.ContentLength = fileInf.Length;
//缓冲区大小设置为2kb
int buffLength = 2048;
byte [] buff = new byte [buffLength];
int contentLen;
//打开一个文件流(System.IO.FileStream)来读取要上传的文件
FileStream fs = fileInf.OpenRead();
try
{
//要上传的文件的流被写入
Stream strm = reqFTP.GetRequestStream();
//从文件流2kb一次读取
contentLen = fs.Read(buff,0,buffLength);
//直到流内容结束
while(contentLen!= 0)
{
//将内容从文件流写入FTP上传流
strm.Write (buff,0,contentLen);
contentLen = fs.Read(buff,0,buffLength);
}
//关闭文件流和请求流
strm.Close();
fs.Close();
}
catch(Exception ex)
{
//MessageBox.Show(ex.Message,Upload Error);
}
}
这些是函数调用
protected void btnDownload_Click(object sender,EventArgs e)
{
string FullServer =ftp://+ ftpServerIP;
下载(FullServer,LbxServer.SelectedValue);
}
protected void btnUpload_Click(object sender,EventArgs e)
{
上传(LbxLocal.SelectedValue);
}
感谢大家对此事有任何帮助。
我想你会发现 ftp:// myservername
是一个无效的方案新的 FileStream
。请注意,您的 FileStream
表示本地目标,而不是远程文件。
如果您打算下载远程文件到您的本地系统, filePath
应该引用本地网络上的一个文件夹(例如, C:\temp
或 \\somecomputer\share
等)
I get "System.NotSupportedException: The given path's format is not supported. at System.Security.Util.StringExpressionSet" when trying to download an item from an ftp(which have access to). The upload seems to work fine and is done similarly I'll post both functions below:
private void Download(string filePath, string fileName)
{
FtpWebRequest reqFTP;
try
{
//filePath = <<The full path where the file is to be created. the>>,
//fileName = <<Name of the file to be createdNeed not name on FTP server. name name()>>
Label1.Text = filePath + "/" + fileName;
FileStream outputStream = new FileStream(filePath + "/" + fileName, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new
Uri("ftp://" + ftpServerIP + "/" + fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception ex)
{
Label1.Text = ex.ToString();
}
}
public void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP;
// Create FtpWebRequest object from the Uri provided
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP +"/" + fileInf.Name));
// Provide the WebPermission Credintials
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
// By default KeepAlive is true, where the control connection is not closed
// after a command is executed.
reqFTP.KeepAlive = false;
// Specify the command to be executed.
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// Specify the data transfer type.
reqFTP.UseBinary = true;
// Notify the server about the size of the uploaded file
reqFTP.ContentLength = fileInf.Length;
// The buffer size is set to 2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// Opens a file stream (System.IO.FileStream) to read the file to be uploaded
FileStream fs = fileInf.OpenRead();
try
{
// Stream to which the file to be upload is written
Stream strm = reqFTP.GetRequestStream();
// Read from the file stream 2kb at a time
contentLen = fs.Read(buff, 0, buffLength);
// Till Stream content ends
while (contentLen != 0)
{
// Write Content from the file stream to the FTP Upload Stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
// Close the file stream and the Request Stream
strm.Close();
fs.Close();
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "Upload Error");
}
}
and these are the function calls
protected void btnDownload_Click(object sender, EventArgs e)
{
string FullServer = "ftp://" + ftpServerIP;
Download(FullServer, LbxServer.SelectedValue);
}
protected void btnUpload_Click(object sender, EventArgs e)
{
Upload(LbxLocal.SelectedValue);
}
Thank you all for any help on this matter.
I think you'll find that ftp://myservername
is an invalid scheme for a new FileStream
. Note that your FileStream
represents the local target, not the remote file.
If your intent is to download a remote file to your local system, filePath
should refer to a folder on your local network (e.g., C:\temp
or \\somecomputer\share
, etc.)
这篇关于c#asp.net FTP错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!