安国有 王淑妍
【摘 要】基于VS2012编程工具,通过C#语言有效利用FtpWebRequest与DosFramer控件开发实用的互联网公文编写与传输工具。
【Abstract】Based on VS2012 programming tools, this paper makes effective use of FtpWebRequest and DosFramer control in C# language to develop practical internet document writing and transmission tools.
【关键词】C#;互联网开发;VS2012;公文编写与传输
【Keywords】C#; internet development; VS2012; document writing and transmission
【中图分类号】TP311 【文献标志码】A 【文章编号】1673-1069(2020)09-0118-02
1 引言
随着信息技术不断发展与普及应用,单位信息技术管理人员的技术水平不断提升,其为单位量身开发应用软件之意愿越发强烈,结合多年的工作经验,现将“基于互联网络环境”,利用C#语言,有效利用FtpWebRequest与DosFramer控件,开发公文编写与传输的经验加以总结,供同行及程序开发爱好者借鉴。
2 开发与运行环境构建
①FTP服务器环境:基于Windows 7.0,基于Internet信息服务(IIS)管理器,添加FTP站点,依据对话框,设置站点名称(MyFTP)、内容目录(D:\MyFile)、IP地址(127.0.0.1)等,其中SSL选择,选择“无”,“身份验证”选择“基本”,授权“允许访问”选择“指定用户”,并填写已建的用户(用户名:user001,密码:123),“权限”选择“读取”和“写入”。
②FTP公文目录规划。FTP服务器内容目录(D:\MyFile)下建立Template和WandTDocument文件夹。
3 开发环境构建
第一,下载安装Microsoft Visual Studio 2012(以下简称VS2012)。
第二,下载DosFramer.ocx控件,如果控件为32位,拷贝到System32,否则拷贝到SysWOW64文件夹,并对其进行注册。
第三,利用Word 2010创建公文模板(MyTemplate.docx),存于FTP服务器的Template文件夹内。
4 主要功能方法的实现
①利用VS2012创建WandTDocument项目,通过工具箱建选项卡,添加doframer.ocx。
②在Form1窗体放置:两个button控件和一个DSO Framer Control Object控件,设置button1的Text为“公文编写”,button2的Text為“公文发送”,axFramerControl1的Name为MyEdit。
③在WandTDocument项目的输出路径(bin\Debug\)下建立Document文件夹。
④方法定义。在Form1空间引用处输入:using System.IO;using System.Net;定义窗体级对象与变量,如下:
private FtpWebRequest MyFTP;private string LocalFileName;
private string LocalPath=Application.StartupPath+ @"\Document\";
最后定义如下方法,实现调用公文模板编写公文,并发送公文,具体如下:
private void Connect(String path)//连接FTP服务器
{
MyFTP=(FtpWebRequest)FtpWebRequest.Create(new Uri(path));
MyFTP.UseBinary=true;
MyFTP.Credentials=new NetworkCredential("user001","123");
}
public bool SendFile(string filename)
{
FileInfo fileIno=new FileInfo(filename);
string url="ftp://127.0.0.1/WandTDocument/"+ fileIno.Name;
ConFtp(url);MyFTP.KeepAlive=false;
MyFTP.Method=WebRequestMethods.Ftp.UploadFile;
MyFTP.ContentLength=fileIno.Length;int bufLng=2048;
byte[] buf=new byte[bufLng];int contLng;
FileStream fs=fileIno.OpenRead();
try
{
Stream strm=MyFTP.GetRequestStream();
contLng=fs.Read(buf,0,bufLng);
while (contLng !=0)
{strm.Write(buf,0,contLng);contLng=fs.Read(buf,0,bufLng);}
strm.Close();fs.Close();return true;
}
catch (Exception ex) {return false;}
}
public bool WriteFile(string fileName)
{
try
{
string localpath=Application.StartupPath + @"\Document\";
string localFName=localpath + fileName;
string url="ftp://127.0.0.1/Template/template.docx";
ConFtp(url);
MyFTP.Credentials=new NetworkCredential("user001","123");
FtpWebResponse Rpe=(FtpWebResponse)MyFTP.
GetResponse();
Stream ftpStm=Rpe.GetResponseStream();
long cl=Rpe.ContentLength;int buflng=2048;int readsl;
byte[] buf=new byte[buflng];readsl=ftpStm.Read(buf,0,buflng);
FileStream outStm=new FileStream(localFName,FileMode.Create);
while (readsl>0)
{
outStm.Write(buf,0,readsl);readsl=ftpStm.Read(buf,0,buflng);
}
ftpStm.Close();outStm.Close();Rpe.Close();return true;
}
catch (Exception ex) {return false;}
}
private string GetFileName()
{
string filename=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss fff");filename=filename.Replace("-","").Replace("/","").Replace(" ", "").Replace(":","")+".docx";return filename;
}
5 基本功能調用
private void button1_Click(object sender, EventArgs e)
{
LocalFileName=GetFileName();
if (WriteFile(LocalFileName))
{MyEdit.Open(LocalPath +LocalFileName);}
else{ MessageBox.Show("调取公文模板失败!");}
}
private void button2_Click(object sender, EventArgs e)
{
string localfile =LocalPath +LocalFileName;
if(!SendFile(localfile)){MessageBox.Show("公文发送失败!");}
}