欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Winform文件上传

程序员文章站 2022-07-11 08:08:37
近期在做了一个winform的项目的附件上传的需求 最初项目选型的时候有三种 1.使用webservice、webapi上传文件 2,直接保存在数据库中 3.使用共享目录+dos命令 第一种有文件大小限制、设计到的知识比较多,第二种会给数据库增加不小的压力,于是最后选了第三种 下面上关键代码,代码很 ......

近期在做了一个winform的项目的附件上传的需求

最初项目选型的时候有三种

1.使用webservice、webapi上传文件

2,直接保存在数据库中

3.使用共享目录+dos命令

 

第一种有文件大小限制、设计到的知识比较多,第二种会给数据库增加不小的压力,于是最后选了第三种

下面上关键代码,代码很简单,每个函数都写了说明

 1         /// <summary>
 2         /// 连接远程目录
 3         /// </summary>
 4         /// <param name="path"></param>
 5         /// <param name="username"></param>
 6         /// <param name="password"></param>
 7         /// <returns></returns>
 8         public static bool connectstate(string path=@"\\192.168.0.136\软件", string username= "administrator", string password="******")
 9         {
10             bool flag = false;
11             process proc = new process();
12             try
13             {
14                 proc.startinfo.filename = "cmd.exe";
15                 proc.startinfo.useshellexecute = false;
16                 proc.startinfo.redirectstandardinput = true;
17                 proc.startinfo.redirectstandardoutput = true;
18                 proc.startinfo.redirectstandarderror = true;
19                 proc.startinfo.createnowindow = true;
20                 proc.start();
21                 //string dosline1 = "net use * /del /y";
22                 string dosline2 = "net use " + path + " " + password + " /user:" + username;
23                 //proc.standardinput.writeline(dosline1);
24                 proc.standardinput.writeline(dosline2);
25                 proc.standardinput.writeline("exit");
26                 while (!proc.hasexited)
27                 {
28                     proc.waitforexit(1000);
29                 }
30                 string errormsg = proc.standarderror.readtoend();
31                 proc.standarderror.close();
32                 if (string.isnullorempty(errormsg))
33                 {
34                     flag = true;
35                 }
36                 else
37                 {
38                     //throw new exception(errormsg);
39                 }
40             }
41             catch (exception ex)
42             {
43                 //throw ex;
44                 proc.close();
45                 proc.dispose();
46             }
47             finally
48             {
49                 proc.close();
50                 proc.dispose();
51             }
52             return flag;
53         }
54         /// <summary>
55         /// 向远程文件夹保存本地内容,或者从远程文件夹下载文件到本地
56         /// </summary>
57         /// <param name="src">要保存的文件的路径,如果保存文件到共享文件夹,这个路径就是本地文件路径如:@"d:\1.avi"</param>
58         /// <param name="dst">保存文件的路径,不含名称及扩展名</param>
59         /// <param name="filename">保存文件的名称以及扩展名</param>
60         public static void transport(string src, string dst, string filename)
61         {
62 
63             filestream infilestream = new filestream(src, filemode.open);
64             if (!directory.exists(dst))
65             {
66                 directory.createdirectory(dst);
67             }
68             dst = dst + filename;
69             filestream outfilestream = new filestream(dst, filemode.openorcreate);
70 
71             byte[] buf = new byte[infilestream.length];
72 
73             int bytecount;
74 
75             while ((bytecount = infilestream.read(buf, 0, buf.length)) > 0)
76             {
77                 outfilestream.write(buf, 0, bytecount);
78             }
79 
80             infilestream.flush();
81             infilestream.close();
82             outfilestream.flush();
83             outfilestream.close();
84 
85         }
86         /// <summary>
87         /// 避免保存到服务器上的文件有重复,使用guid对文件进行重命名
88         /// </summary>
89         public static string getguid
90         {
91             get
92             {
93                 return guid.newguid().tostring().tolower();
94             }
95         }