> 백엔드 개발 > C#.Net 튜토리얼 > C# winfrom은 FTP 파일 관리 구현 코드를 시뮬레이션합니다.

C# winfrom은 FTP 파일 관리 구현 코드를 시뮬레이션합니다.

高洛峰
풀어 주다: 2017-01-21 14:31:03
원래의
1766명이 탐색했습니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

using System;

using System.Collections.Generic;

using System.Text;

using System.Net;

using System.IO;

using System.Windows.Forms;

 

  

namespace ConvertData

{

    class FtpUpDown

    {

 

        string ftpServerIP;

        string ftpUserID;

        string ftpPassword;

        FtpWebRequest reqFTP;

 

        private void Connect(String path)//连接ftp

        {

            // 根据uri创建FtpWebRequest对象

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));

            // 指定数据传输类型

            reqFTP.UseBinary = true;

            // ftp用户名和密码

            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

        }

 

        public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)

        {

            this.ftpServerIP = ftpServerIP;

            this.ftpUserID = ftpUserID;

            this.ftpPassword = ftpPassword;

        }

 

        //都调用这个

        private string[] GetFileList(string path, string WRMethods)//上面的代码示例了如何从ftp服务器上获得文件列表

        {

            string[] downloadFiles;

            StringBuilder result = new StringBuilder();

            try

            {

                Connect(path);

                reqFTP.Method = WRMethods;

                WebResponse response = reqFTP.GetResponse();

                StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名

                string line = reader.ReadLine();

                while (line != null)

                {

                    result.Append(line);

                    result.Append("\n");

                    line = reader.ReadLine();

                }

                // to remove the trailing '\n'

                result.Remove(result.ToString().LastIndexOf('\n'), 1);

                reader.Close();

                response.Close();

                return result.ToString().Split('\n');

            }

            catch (Exception ex)

            {

                System.Windows.Forms.MessageBox.Show(ex.Message);

                downloadFiles = null;

                return downloadFiles;

            }

        }

 

        public string[] GetFileList(string path)//上面的代码示例了如何从ftp服务器上获得文件列表

        {

            return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory);

 

        }

 

  

 

        public string[] GetFileList()//上面的代码示例了如何从ftp服务器上获得文件列表

        {

            return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory);

        }

 

        public void Upload(string filename) //上面的代码实现了从ftp服务器上载文件的功能

        {

            FileInfo fileInf = new FileInfo(filename);

            string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;

            Connect(uri);//连接      

            // 默认为true,连接不会被关闭

            // 在一个命令之后被执行

            reqFTP.KeepAlive = false;

            // 指定执行什么命令

            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            // 上传文件时通知服务器文件的大小

            reqFTP.ContentLength = fileInf.Length;

            // 缓冲大小设置为kb 

            int buffLength = 2048;

 

            byte[] buff = new byte[buffLength];

            int contentLen;

            // 打开一个文件流(System.IO.FileStream) 去读上传的文件

            FileStream fs = fileInf.OpenRead();

            try

            {

                // 把上传的文件写入流

                Stream strm = reqFTP.GetRequestStream();

                // 每次读文件流的kb 

                contentLen = fs.Read(buff, 0, buffLength);

                // 流内容没有结束

                while (contentLen != 0)

                {

                    // 把内容从file stream 写入upload stream 

                    strm.Write(buff, 0, contentLen);

                    contentLen = fs.Read(buff, 0, buffLength);

                }

                // 关闭两个流

                strm.Close();

                fs.Close();

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message, "Upload Error");

            }

        }

        public bool Download(string filePath, string fileName, out string errorinfo)////上面的代码实现了从ftp服务器下载文件的功能

        {

            try

            {

                String onlyFileName = Path.GetFileName(fileName);

                string newFileName = filePath + "\\" + onlyFileName;

                if (File.Exists(newFileName))

                {

                    errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);

                    return false;

                }

                string url = "ftp://" + ftpServerIP + "/" + fileName;

                Connect(url);//连接  

                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);

                FileStream outputStream = new FileStream(newFileName, FileMode.Create);

 

                while (readCount > 0)

                {

                    outputStream.Write(buffer, 0, readCount);

 

                    readCount = ftpStream.Read(buffer, 0, bufferSize);

                }

                ftpStream.Close();

                outputStream.Close();

                response.Close();

                errorinfo = "";

                return true;

            }

            catch (Exception ex)

            {

                errorinfo = string.Format("因{0},无法下载", ex.Message);

                return false;

            }

        }

 

        //删除文件

 

         public void DeleteFileName(string fileName)

         {

             try

             {

                 FileInfo fileInf = new FileInfo(fileName);

                 string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;

                 Connect(uri);//连接        

                 // 默认为true,连接不会被关闭

 

                 // 在一个命令之后被执行

 

                 reqFTP.KeepAlive = false;

 

                 // 指定执行什么命令

 

                 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;

                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

                 response.Close();

             }

             catch (Exception ex)

             {

                 MessageBox.Show(ex.Message, "删除错误");

             }

         }

 

        //创建目录

 

        public void MakeDir(string dirName)

        {

            try

            {

                string uri = "ftp://" + ftpServerIP + "/" + dirName;

                Connect(uri);//连接       

                reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

                response.Close();

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

        //删除目录

        public void delDir(string dirName)

        {

            try

            {

 

                string uri = "ftp://" + ftpServerIP + "/" + dirName;

                Connect(uri);//连接       

                reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

                response.Close();

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

 

        //获得文件大小

 

        public long GetFileSize(string filename)

        {

            long fileSize = 0;

            try

            {

                FileInfo fileInf = new FileInfo(filename);

                string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;

                Connect(uri);//连接       

                reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

                fileSize = response.ContentLength;

                response.Close();

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            return fileSize;

        }

 

        //文件改名

        public void Rename(string currentFilename, string newFilename)

        {

            try

            {

                FileInfo fileInf = new FileInfo(currentFilename);

                string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;

                Connect(uri);//连接

                reqFTP.Method = WebRequestMethods.Ftp.Rename;

                reqFTP.RenameTo = newFilename;

                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

                //Stream ftpStream = response.GetResponseStream();

 

                //ftpStream.Close();

                response.Close();

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

 

        //获得文件明晰

        public string[] GetFilesDetailList()

        {

            return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);

        }

        //获得文件明晰

        public string[] GetFilesDetailList(string path)

        {

            return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);

        }

 

    }

}

로그인 후 복사

上面为类,举例证明如何代用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

private void button1_Click(object sender, EventArgs e)//文件上传

        {

            FtpUpDown ftpUpDown = new FtpUpDown("192.168.2.130:21", "wl","123456");

            ftpUpDown.Upload("E:\\other.rar");  

        }

 private void button3_Click(object sender, EventArgs e)//修改

        {

            FtpUpDown ftpUpDown = new FtpUpDown("192.168.2.130:21", "wl", "123456");

            ftpUpDown.Rename("张三", "李四");

        }

 private void button4_Click(object sender, EventArgs e)//删除

        {

            FtpUpDown ftpUpDown = new FtpUpDown("192.168.2.130:21", "wl", "123456");

            ftpUpDown.delDir("张三");

        }

 private void button2_Click(object sender, EventArgs e)//添加

        {

            FtpUpDown ftpUpDown = new FtpUpDown("192.168.2.130:21", "wl", "123456");

            ftpUpDown.MakeDir(this.TxT_name.Text);

        }

 

  

//获得ftp文件的文件明晰,还为处理,能够获得所有的文件名称

 FtpUpDown ftpUpDown = new FtpUpDown("192.168.2.130", "wl", "123456");

            string[] str = ftpUpDown.GetFilesDetailList();

            int i = 1;

            foreach (string item in str)

            {

                string[] name = item.Split(' ');

                TxT_name.Text += name[name.Length - 1] + ";";

                i++;

            }

            label1.Text = i.ToString();

로그인 후 복사

更多C# winfrom 模拟ftp文件管理实现代码相关文章请关注PHP中文网!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿