C#FTP类操作解析Word格式.docx
- 文档编号:5765420
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:22
- 大小:20.36KB
C#FTP类操作解析Word格式.docx
《C#FTP类操作解析Word格式.docx》由会员分享,可在线阅读,更多相关《C#FTP类操作解析Word格式.docx(22页珍藏版)》请在冰点文库上搜索。
利用WebRequestMethods.Ftp设置FtpWebRequest的Method属性,指定使用的FTP协议方法的类型
第三步:
设置FtpWebRequest的Credentials属性,指定用户名和密码
第四步:
发出请求FtpWebResponse
第五步:
接收响应数据流(有些ftp操作可能没这一步,例如给文件夹改名)
第六步:
关闭流
下面从几段代码来分别展示ftp的不同操作:
1.文件夹和文件信息
关键知识说明:
a.FtpWebRequest类没有公开的构造函数,我们通过WebRequest.Create方法,获得FtpWebRequest的实例
b.通过WebRequestMethods.Ftp.ListDirectoryDetails(详细列表)或者WebRequestMethods.Ftp.ListDirectory(简短列表)获取FTP服务器上的文件列表
c.请求返回的数据在GetResponseStream方法返回的流中
d.字符编码请用System.Text.Encoding.Default,要不中文名会乱码
e.FtpWebRequest.Credentials属性设置登陆用户名和密码
f.FtpWebRequest.UseBinary属性,true,指示服务器要传输的是二进制数据.false,指示数据为文本。
默认值为true
g.FtpWebRequest.EnableSsl属性,如果控制和数据传输是加密的,则为true.否则为false.默认值为false
实例代码:
获取ftp:
//218.16.229.120/上的文件信息
Uriuri=newUri("
ftp:
//218.16.229.120/"
);
FtpWebRequestlistRequest=(FtpWebRequest)WebRequest.Create(uri);
listRequest.Method=WebRequestMethods.Ftp.ListDirectoryDetails;
//listRequest.Method=WebRequestMethods.Ftp.ListDirectory;
stringftpUser="
"
;
stringftpPassWord="
listRequest.Credentials=newNetworkCredential(ftpUser,ftpPassWord);
FtpWebResponselistResponse=(FtpWebResponse)listRequest.GetResponse();
StreamresponseStream=listResponse.GetResponseStream();
StreamReaderreadStream=newStreamReader(responseStream,System.Text.Encoding.Default);
if(readStream!
=null)
{
MessageBox.Show(readStream.ReadToEnd());
}
MessageBox.Show(string.Format("
状态:
{0},{1}"
listResponse.StatusCode,listResponse.StatusDescription));
listResponse.Close();
responseStream.Close();
readStream.Close();
通过WebRequestMethods.Ftp.ListDirectoryDetails(详细列表)或者WebRequestMethods.Ftp.ListDirectory(简短列表)返回的结果是不一样的.请看图
利用WebRequestMethods.Ftp.ListDirectoryDetails,readStream.ReadToEnd()返回的字符串比较复杂(不同类型的Ftp会有不同返回形式的返回结果),要把里面的文件夹和文件区分别列出来比较繁琐,代码比较多.
大概的调用方法如下:
stringdataString=readStream.ReadToEnd();
DirectoryListParserparser=newDirectoryListParser(dataString);
FileStruct[]fs=parser.FullListing;
返回的FileStruct有一个属性IsDirectory,可以区分文件夹和文件
DirectoryListParser类代码如下:
DirectoryListParser
<
!
--
CodehighlightingproducedbyActiproCodeHighlighter(freeware)
http:
//www.CodeH
-->
usingSystem;
usingSystem.IO;
usingSystem.Net;
usingSystem.Text.RegularExpressions;
usingSystem.Collections;
usingSystem.Collections.Generic;
namespaceWindowsApplicationFTP
publicstructFileStruct
{
publicstringFlags;
publicstringOwner;
publicboolIsDirectory;
publicstringCreateTime;
publicstringName;
}
publicenumFileListStyle
UnixStyle,
WindowsStyle,
Unknown
publicclassDirectoryListParser
privateList<
FileStruct>
_myListArray;
publicFileStruct[]FullListing
get
return_myListArray.ToArray();
publicFileStruct[]FileList
{
List<
_fileList=newList<
();
foreach(FileStructthisstructin_myListArray)
if(!
thisstruct.IsDirectory)
_fileList.Add(thisstruct);
return_fileList.ToArray();
publicFileStruct[]DirectoryList
_dirList=newList<
if(thisstruct.IsDirectory)
_dirList.Add(thisstruct);
return_dirList.ToArray();
publicDirectoryListParser(stringresponseString)
_myListArray=GetList(responseString);
GetList(stringdatastring)
myListArray=newList<
string[]dataRecords=datastring.Split('
\n'
);
FileListStyle_directoryListStyle=GuessFileListStyle(dataRecords);
foreach(stringsindataRecords)
if(_directoryListStyle!
=FileListStyle.Unknown&
&
s!
="
)
FileStructf=newFileStruct();
f.Name="
.."
switch(_directoryListStyle)
caseFileListStyle.UnixStyle:
f=ParseFileStructFromUnixStyleRecord(s);
break;
caseFileListStyle.WindowsStyle:
f=ParseFileStructFromWindowsStyleRecord(s);
if(f.Name!
&
f.Name!
."
myListArray.Add(f);
returnmyListArray;
privateFileStructParseFileStructFromWindowsStyleRecord(stringRecord)
///Assumingtherecordstyleas
///02-03-0407:
46PM<
DIR>
Append
stringprocessstr=Record.Trim();
stringdateStr=processstr.Substring(0,8);
processstr=(processstr.Substring(8,processstr.Length-8)).Trim();
stringtimeStr=processstr.Substring(0,7);
processstr=(processstr.Substring(7,processstr.Length-7)).Trim();
f.CreateTime=dateStr+"
"
+timeStr;
if(processstr.Substring(0,5)=="
f.IsDirectory=true;
processstr=(processstr.Substring(5,processstr.Length-5)).Trim();
else
string[]strs=processstr.Split(newchar[]{'
'
},StringSplitOptions.RemoveEmptyEntries);
processstr=strs[1];
f.IsDirectory=false;
f.Name=processstr;
//Restisname
returnf;
publicFileListStyleGuessFileListStyle(string[]recordList)
foreach(stringsinrecordList)
if(s.Length>
10
Regex.IsMatch(s.Substring(0,10),"
(-|d)((-|r)(-|w)(-|x)){3}"
))
returnFileListStyle.UnixStyle;
}
elseif(s.Length>
8
Regex.IsMatch(s.Substring(0,8),"
[0-9]{2}-[0-9]{2}-[0-9]{2}"
returnFileListStyle.WindowsStyle;
returnFileListStyle.Unknown;
privateFileStructParseFileStructFromUnixStyleRecord(stringrecord)
///Assumingrecordstyleas
///dr-xr-xr-x1ownergroup0Nov252002bussys
if(record[0]=='
-'
||record[0]=='
d'
{//itsavalidfilerecord
stringprocessstr=record.Trim();
f.Flags=processstr.Substring(0,9);
f.IsDirectory=(f.Flags[0]=='
processstr=(processstr.Substring(11)).Trim();
_cutSubstringFromStringWithTrim(refprocessstr,'
0);
//skiponepart
f.Owner=_cutSubstringFromStringWithTrim(refprocessstr,'
f.CreateTime=getCreateTimeString(record);
intfileNameIndex=record.IndexOf(f.CreateTime)+f.CreateTime.Length;
f.Name=record.Substring(fileNameIndex).Trim();
//Restofthepartisname
privatestringgetCreateTimeString(stringrecord)
//Doesjustbasicdatetimestringvalidationfordemo,notanaccuratecheck
//ondateandtimefields
stringmonth="
(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)"
stringspace=@"
(\040)+"
stringday="
([0-9]|[1-3][0-9])"
stringyear="
[1-2][0-9]{3}"
stringtime="
[0-9]{1,2}:
[0-9]{2}"
RegexdateTimeRegex=newRegex(month+space+day+space+"
("
+year+"
|"
+time+"
)"
RegexOptions.IgnoreCase);
Matchmatch=dateTimeRegex.Match(record);
returnmatch.Value;
privatestring_cutSubstringFromStringWithTrim(refstrings,charc,intstartIndex)
intpos1=s.IndexOf(c,startIndex);
stringretString=s.Substring(0,pos1);
s=(s.Substring(pos1)).Trim();
returnretString;
2.取ftp登陆身份验证完成后的欢迎信息
a.FtpWebResponse.WelcomeMessage属性获取身份验证完成时FTP服务器发送的消息
//218.16.229.120/登陆身份验证完成后的欢迎信息
MessageBox.Show(listResponse.WelcomeMessage);
附加说明:
要是FTP服务器的欢迎信息带有中文,运行这段代码时可能会发生异常(基础连接已经关闭:
服务器提交了协议).
解决办法:
打补丁Microsoft.NETFramework2.0ServicePack1
3.重命名目录
a.WebRequestMethods.Ftp.Rename表示重命名目录的FTP协议方法
b.FtpWebRequest.RenameTo属性重命名的新名称
把ftp:
//218.16.229.120/上的a目录重命名为av
//218.16.229.120/a"
listRequest.Method=WebRequestMethods.Ftp.Rename;
listRequest.RenameTo="
av"
MessageBox.Show(listResponse.StatusDescription);
4.删除目录
a.WebRequestMethods.Ftp.RemoveDirectory表示移除目录的FTP协议方法
删除ftp:
//218.16.229.120/上的av文件夹
//218.16.229.120/av"
listRequest.Method=WebRequestMethods.Ftp.RemoveDirectory;
5.新建目录
a.WebRequestMethods.Ftp.MakeDirectory表示在FTP服务器上创建目录的协议方法
在ftp:
//218.16.229.120/上建立目录vb
//218.16.229.120/vb"
listRequest.Method=WebRequestMethods.Ftp.MakeDirectory;
MessageBox.Show(listResponse.StatusDescript
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FTP 操作 解析