C#大量函数

引用 必须添加

C# code ?
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
using  System;
using  System.Collections.Generic;
using  System.Text;
using  Microsoft.Win32;  //对注册表操作
using  System.Collections;  //使用Arraylist
using  System.Security.Cryptography; //加密解密
using  System.IO;     //文件操作
using  System.Runtime.InteropServices; //调用DLL DllImport
using  System.Management;   //获取硬件信息
using  System.Net;        //获取IP地址是用到
using  System.Drawing;    //image 
using  System.Net.NetworkInformation;     //ping 用到
using  System.Text.RegularExpressions;    //正则
using  System.Data;
using  System.Data.SqlClient;
using  Microsoft.VisualBasic;    //简体转繁体时用到
using  System.Web;        //html UrlEncode
 
 
//注册表操作
     public  class  GF_RegReadWrite
     {
        
         /// <summary>
         /// 读取路径为keypath,键名为keyname的注册表键值,缺省返回def
         /// </summary>
         /// <param name="rootkey"></param>
         /// <param name="keypath">路径</param>
         /// <param name="keyname">键名</param>
         /// <param name="rtn">默认为null</param>
         /// <returns></returns>        
         static  public  bool  GetRegVal(RegistryKey rootkey,  string  keypath,  string  keyname,  out  string  rtn)
         {
             rtn =  "" ;
             try
             {
                 RegistryKey key = rootkey.OpenSubKey(keypath);
                 rtn = key.GetValue(keyname).ToString();
                 key.Close();
                 return  true ;
             }
             catch
             {
                 return  false ;
             }
         }
      
         /// <summary>
         /// 设置路径为keypath,键名为keyname的注册表键值为keyval
         /// </summary>
         /// <param name="rootkey"></param>
         /// <param name="keypath"></param>
         /// <param name="keyname"></param>
         /// <param name="keyval"></param>
         /// <returns></returns>
         static  public  bool  SetRegVal(RegistryKey rootkey,  string  keypath,  string  keyname,  string  keyval)
         {
             try
             {
                 RegistryKey key = rootkey.OpenSubKey(keypath,  true );
                 if  (key ==  null )
                     key = rootkey.CreateSubKey(keypath);
                 key.SetValue(keyname, ( object )keyval);
                 key.Close();
                 return  true ;
             }
             catch
             {
                 return  false ;
             }
         }
 
         /// 创建路径为keypath的键
         private  RegistryKey CreateRegKey(RegistryKey rootkey,  string  keypath)
         {
             try
             {
                 return  rootkey.CreateSubKey(keypath);
             }
             catch
             {
                 return  null ;
             }
         }
         /// 删除路径为keypath的子项
         private  bool  DelRegSubKey(RegistryKey rootkey,  string  keypath)
         {
             try
             {
                 rootkey.DeleteSubKey(keypath);
                 return  true ;
             }
             catch
             {
                 return  false ;
             }
         }
         /// 删除路径为keypath的子项及其附属子项
         private  bool  DelRegSubKeyTree(RegistryKey rootkey,  string  keypath)
         {
             try
             {
                 rootkey.DeleteSubKeyTree(keypath);
                 return  true ;
             }
             catch
             {
                 return  false ;
             }
         }
         /// 删除路径为keypath下键名为keyname的键值
         private  bool  DelRegKeyVal(RegistryKey rootkey,  string  keypath,  string  keyname)
         {
             try
             {
                 RegistryKey key = rootkey.OpenSubKey(keypath,  true );
                 key.DeleteValue(keyname);
                 return  true ;
             }
             catch
             {
                 return  false ;
             }
         }
     }
C# code ?
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
//类型转换
     public  class  GF_Convert
     {
         /// <summary>
         /// 字符串 转换 char数组
         /// </summary>
         /// <param name="in_str"></param>
         /// <param name="in_len"></param>
         /// <returns></returns>
         public  static  char [] string2chararray( string  in_str,  int  in_len)
         {
             char [] ch =  new  char [in_len];
             in_str.ToCharArray().CopyTo(ch, 0);
             return  ch;
         }
 
         /// <summary>
         /// char数组 转换 字符串
         /// </summary>
         /// <param name="in_str"></param>
         /// <returns></returns>        
         public  static  string  chararray2string( char [] in_str)
         {
             string  out_str;
             out_str =  new  string (in_str);
             int  i = out_str.IndexOf( '\0' , 0);
             if  (i == -1)
                 i = 16;
             return  out_str.Substring(0, i);
         }
 
         /// <summary>
         /// byte数组 转换 字符串
         /// </summary>
         /// <param name="in_str"></param>
         /// <returns></returns>
         public  static  string  bytearray2string( byte [] in_str)
         {
             string  out_str;
             out_str = System.Text.Encoding.Default.GetString(in_str);
             return  out_str.Substring(0, out_str.IndexOf( '\0' , 0));
 
         }
 
         /// <summary>
         /// 字符串 转换 byte数组  注意转换出来会使原来的bytearray长度变短
         /// </summary>
         /// <param name="in_str"></param>
         /// <returns></returns>
         public  static  byte [] string2bytearray( string  in_str)
         {
             return  System.Text.Encoding.Default.GetBytes(in_str);
         }
 
         /// <summary>
         /// 字符串 转换 byte数组  长度为传如的长度
         /// </summary>
         /// <param name="in_str">传入字符串</param>
         /// <param name="iLen">目标字节数组长度</param>
         /// <returns></returns>
         public  static  byte [] string2bytearray( string  in_str,  int  iLen)
         {
             byte [] bytes =  new  byte [iLen];
             byte [] bsources=System.Text.Encoding.Default.GetBytes(in_str);
             Array.Copy(bsources, bytes, bsources.Length);
             
             
             return  bytes;
         }
         
         /// <summary>
         /// 将字符串编码为Base64字符串
         /// </summary>
         /// <param name="str"></param>
         /// <returns></returns>
         public  static  string  Base64Encode( string  str)
         {
             byte [] barray;
             barray = Encoding.Default.GetBytes(str);
             return  Convert.ToBase64String(barray);
         }
 
         /// <summary>
         /// 将Base64字符串解码为普通字符串
         /// </summary>
         /// <param name="str"></param>
         /// <returns></returns>
         public  static  string  Base64Decode( string  str)
         {
             byte [] barray;
             try
             {
                 barray = Convert.FromBase64String(str);
                 return  Encoding.Default.GetString(barray);
             }
             catch
             {
                 return  str;
             }
         }
 
         /// <summary>
         /// 图片 转换 byte数组
         /// </summary>
         /// <param name="pic"></param>
         /// <param name="fmt"></param>
         /// <returns></returns>
         public  static  byte [] image_Image2Byte(Image pic, System.Drawing.Imaging.ImageFormat fmt)
         {
             MemoryStream mem =  new  MemoryStream();
             pic.Save(mem, fmt);
             mem.Flush();
             return  mem.ToArray();
         }
         /// <summary>
         /// byte数组 转换 图片
         /// </summary>
         /// <param name="bytes"></param>
         /// <returns></returns>
         public  static  Image image_Byte2Image( byte [] bytes)
         {
             MemoryStream mem =  new  MemoryStream(bytes,  true );
             mem.Read(bytes, 0, bytes.Length);
             mem.Flush();
             Image aa = Image.FromStream(mem);
             return  aa;
         }
                 
         /// <summary>
         /// ip 转换 长整形
         /// </summary>
         /// <param name="strIP"></param>
         /// <returns></returns>
         public  static  long  IP2Long( string  strIP)
         {
 
             long [] ip =  new  long [4];
 
             string [] s = strIP.Split( '.' );
             ip[0] =  long .Parse(s[0]);
             ip[1] =  long .Parse(s[1]);
             ip[2] =  long .Parse(s[2]);
             ip[3] =  long .Parse(s[3]);
 
             return  (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
         }
 
         /// <summary>
         /// 长整形 转换 IP
         /// </summary>
         /// <param name="longIP"></param>
         /// <returns></returns>
         public  static  string  Long2IP( long  longIP)
         {
 
 
             StringBuilder sb =  new  StringBuilder( "" );
             sb.Append(longIP >> 24);
             sb.Append( "." );
 
             //将高8位置0,然后右移16为
 
 
             sb.Append((longIP & 0x00FFFFFF) >> 16);
             sb.Append( "." );
 
 
             sb.Append((longIP & 0x0000FFFF) >> 8);
             sb.Append( "." );
 
             sb.Append((longIP & 0x000000FF));
 
 
             return  sb.ToString();
         }
 
         /// <summary>
         /// 将8位日期型整型数据转换为日期字符串数据
         /// </summary>
         /// <param name="date">整型日期</param>
         /// <param name="chnType">是否以中文年月日输出</param>
         /// <returns></returns>
         public  static  string  FormatDate( int  date,  bool  chnType)
         {
             string  dateStr = date.ToString();
 
             if  (date <= 0 || dateStr.Length != 8)
                 return  dateStr;
 
             if  (chnType)
                 return  dateStr.Substring(0, 4) +  "年"  + dateStr.Substring(4, 2) +  "月"  + dateStr.Substring(6) +  "日" ;
 
             return  dateStr.Substring(0, 4) +  "-"  + dateStr.Substring(4, 2) +  "-"  + dateStr.Substring(6);
         }
 
 
         /// <summary>
         /// string型转换为bool型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的bool类型结果</returns>
         public  static  bool  StrToBool( object  expression,  bool  defValue)
         {
             if  (expression !=  null )
                 return  StrToBool(expression, defValue);
 
             return  defValue;
         }
 
         /// <summary>
         /// string型转换为bool型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的bool类型结果</returns>
         public  static  bool  StrToBool( string  expression,  bool  defValue)
         {
             if  (expression !=  null )
             {
                 if  ( string .Compare(expression,  "true" true ) == 0)
                     return  true ;
                 else  if  ( string .Compare(expression,  "false" true ) == 0)
                     return  false ;
             }
             return  defValue;
         }
C# code ?
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
         /// <summary>
         /// 将对象转换为Int32类型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  int  ObjectToInt( object  expression)
         {
             return  ObjectToInt(expression, 0);
         }
 
         /// <summary>
         /// 将对象转换为Int32类型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  int  ObjectToInt( object  expression,  int  defValue)
         {
             if  (expression !=  null )
                 return  StrToInt(expression.ToString(), defValue);
 
             return  defValue;
         }
 
         /// <summary>
         /// 将对象转换为Int32类型,转换失败返回0
         /// </summary>
         /// <param name="str">要转换的字符串</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  int  StrToInt( string  str)
         {
             return  StrToInt(str, 0);
         }
 
         /// <summary>
         /// 将对象转换为Int32类型
         /// </summary>
         /// <param name="str">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  int  StrToInt( string  str,  int  defValue)
         {
             if  ( string .IsNullOrEmpty(str) || str.Trim().Length >= 11 || !Regex.IsMatch(str.Trim(),  @"^([-]|[0-9])[0-9]*(\.\w*)?$" ))
                 return  defValue;
 
             int  rv;
             if  (Int32.TryParse(str,  out  rv))
                 return  rv;
 
             return  Convert.ToInt32(StrToFloat(str, defValue));
         }
 
         /// <summary>
         /// string型转换为float型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  float  StrToFloat( object  strValue,  float  defValue)
         {
             if  ((strValue ==  null ))
                 return  defValue;
 
             return  StrToFloat(strValue.ToString(), defValue);
         }
 
         /// <summary>
         /// string型转换为float型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  float  ObjectToFloat( object  strValue,  float  defValue)
         {
             if  ((strValue ==  null ))
                 return  defValue;
 
             return  StrToFloat(strValue.ToString(), defValue);
         }
 
         /// <summary>
         /// string型转换为float型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  float  ObjectToFloat( object  strValue)
         {
             return  ObjectToFloat(strValue.ToString(), 0);
         }
 
         /// <summary>
         /// string型转换为float型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  float  StrToFloat( string  strValue)
         {
             if  ((strValue ==  null ))
                 return  0;
 
             return  StrToFloat(strValue.ToString(), 0);
         }
 
         /// <summary>
         /// string型转换为float型
         /// </summary>
         /// <param name="strValue">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  float  StrToFloat( string  strValue,  float  defValue)
         {
             if  ((strValue ==  null ) || (strValue.Length > 10))
                 return  defValue;
 
             float  intValue = defValue;
             if  (strValue !=  null )
             {
                 bool  IsFloat = Regex.IsMatch(strValue,  @"^([-]|[0-9])[0-9]*(\.\w*)?$" );
                 if  (IsFloat)
                     float .TryParse(strValue,  out  intValue);
             }
             return  intValue;
         }
 
         /// <summary>
         /// 将对象转换为日期时间类型
         /// </summary>
         /// <param name="str">要转换的字符串</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  DateTime StrToDateTime( string  str, DateTime defValue)
         {
             if  (! string .IsNullOrEmpty(str))
             {
                 DateTime dateTime;
                 if  (DateTime.TryParse(str,  out  dateTime))
                     return  dateTime;
             }
             return  defValue;
         }
 
         /// <summary>
         /// 将对象转换为日期时间类型
         /// </summary>
         /// <param name="str">要转换的字符串</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  DateTime StrToDateTime( string  str)
         {
             return  StrToDateTime(str, DateTime.Now);
         }
 
         /// <summary>
         /// 将对象转换为日期时间类型
         /// </summary>
         /// <param name="obj">要转换的对象</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  DateTime ObjectToDateTime( object  obj)
         {
             return  StrToDateTime(obj.ToString());
         }
 
         /// <summary>
         /// 将对象转换为日期时间类型
         /// </summary>
         /// <param name="obj">要转换的对象</param>
         /// <param name="defValue">缺省值</param>
         /// <returns>转换后的int类型结果</returns>
         public  static  DateTime ObjectToDateTime( object  obj, DateTime defValue)
         {
             return  StrToDateTime(obj.ToString(), defValue);
         }
 
         /// <summary>
         /// 替换回车换行符为html换行符
         /// </summary>
         public  static  string  StrFormat( string  str)
         {
             string  str2;
 
             if  (str ==  null )
             {
                 str2 =  "" ;
             }
             else
             {
                 str = str.Replace( "\r\n" "<br />" );
                 str = str.Replace( "\n" "<br />" );
                 str2 = str;
             }
             return  str2;
         }
 
         /// <summary>
         /// 转换为简体中文
         /// </summary>
         public  static  string  ToSChinese( string  str)
         {
             return  Strings.StrConv(str, VbStrConv.SimplifiedChinese, 0);
             
         }
 
         /// <summary>
         /// 转换为繁体中文
         /// </summary>
         public  static  string  ToTChinese( string  str)
         {
             return  Strings.StrConv(str, VbStrConv.TraditionalChinese, 0);
             
         }
 
 
         /// <summary>
         /// 清除字符串数组中的重复项
         /// </summary>
         /// <param name="strArray">字符串数组</param>
         /// <param name="maxElementLength">字符串数组中单个元素的最大长度</param>
         /// <returns></returns>
         public  static  string [] DistinctStringArray( string [] strArray,  int  maxElementLength)
         {
             Hashtable h =  new  Hashtable();
 
             foreach  ( string  in  strArray)
             {
                 string  k = s;
                 if  (maxElementLength > 0 && k.Length > maxElementLength)
                 {
                     k = k.Substring(0, maxElementLength);
                 }
                 h[k.Trim()] = s;
             }
 
             string [] result =  new  string [h.Count];
 
             h.Keys.CopyTo(result, 0);
 
             return  result;
         }
 
         /// <summary>
         /// 清除字符串数组中的重复项
         /// </summary>
         /// <param name="strArray">字符串数组</param>
         /// <returns></returns>
         public  static  string [] DistinctStringArray( string [] strArray)
         {
             return  DistinctStringArray(strArray, 0);
         }
C# code ?
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
     //加密解密
     public  class  GF_Encrypt
     {
         /// <summary>
         /// DES加密
         /// </summary>
         /// <param name="pToEncrypt">加密字符串</param>
         /// <param name="sKey">密钥</param>
         /// <returns></returns>
         public  static  string  string_Encrypt( string  pToEncrypt,  string  sKey)
         {
             if  (pToEncrypt ==  "" return  "" ;
             if  (sKey.Length < 8) sKey = sKey +  "xuE29xWp" ;
             if  (sKey.Length > 8) sKey = sKey.Substring(0, 8);
             DESCryptoServiceProvider des =  new  DESCryptoServiceProvider();
             //把字符串放到byte数组中  
             //原来使用的UTF8编码,我改成Unicode编码了,不行  
             byte [] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
             //建立加密对象的密钥和偏移量  
             //原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
             //使得输入密码必须输入英文文本  
             des.Key = ASCIIEncoding.Default.GetBytes(sKey);
             des.IV = ASCIIEncoding.Default.GetBytes(sKey);
             MemoryStream ms =  new  MemoryStream();
             CryptoStream cs =  new  CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
             //Write  the  byte  array  into  the  crypto  stream  
             //(It  will  end  up  in  the  memory  stream)  
             cs.Write(inputByteArray, 0, inputByteArray.Length);
             cs.FlushFinalBlock();
             //Get  the  data  back  from  the  memory  stream,  and  into  a  string  
             StringBuilder ret =  new  StringBuilder();
             foreach  ( byte  in  ms.ToArray())
             {
                 //Format  as  hex  
                 ret.AppendFormat( "{0:X2}" , b);
             }
             ret.ToString();
             return  ret.ToString();
         }
 
         /// <summary>
         /// DES解密
         /// </summary>
         /// <param name="pToDecrypt">解密字符串</param>
         /// <param name="sKey">解密密钥</param>
         /// <param name="outstr">返回值</param>
         /// <returns></returns> 
         public  static  bool  string_Decrypt( string  pToDecrypt,  string  sKey,  out  string  outstr)
         {
             if  (pToDecrypt ==  "" )
             {
                 outstr =  "" ;
                 return  true ;
             };
             if  (sKey.Length < 8) sKey = sKey +  "xuE29xWp" ;
             if  (sKey.Length > 8) sKey = sKey.Substring(0, 8);
             try
             {
                 DESCryptoServiceProvider des =  new  DESCryptoServiceProvider();
                 //Put  the  input  string  into  the  byte  array  
                 byte [] inputByteArray =  new  byte [pToDecrypt.Length / 2];
                 for  ( int  x = 0; x < pToDecrypt.Length / 2; x++)
                 {
                     int  i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                     inputByteArray[x] = ( byte )i;
                 }
                 //建立加密对象的密钥和偏移量,此值重要,不能修改  
                 des.Key = ASCIIEncoding.Default.GetBytes(sKey);
                 des.IV = ASCIIEncoding.Default.GetBytes(sKey);
                 MemoryStream ms =  new  MemoryStream();
                 CryptoStream cs =  new  CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                 //Flush  the  data  through  the  crypto  stream  into  the  memory  stream  
                 cs.Write(inputByteArray, 0, inputByteArray.Length);
                 cs.FlushFinalBlock();
                 //Get  the  decrypted  data  back  from  the  memory  stream  
                 //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象  
                 StringBuilder ret =  new  StringBuilder();
                 outstr = System.Text.Encoding.Default.GetString(ms.ToArray());
                 return  true ;
             }
             catch
             {
                 outstr =  "" ;
                 return  false ;
             }
         }
 
         /// <summary> 
         /// 加密
         /// </summary> 
         public  class  AES
         {
             //默认密钥向量
             private  static  byte [] Keys = { 0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D, 0x61, 0x6E, 0x3F };
 
             public  static  string  Encode( string  encryptString,  string  encryptKey)
             {
                 encryptKey = GF_GET.GetSubString(encryptKey, 32,  "" );
                 encryptKey = encryptKey.PadRight(32,  ' ' );
 
                 RijndaelManaged rijndaelProvider =  new  RijndaelManaged();
                 rijndaelProvider.Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 32));
                 rijndaelProvider.IV = Keys;
                 ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
 
                 byte [] inputData = Encoding.UTF8.GetBytes(encryptString);
                 byte [] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
 
                 return  Convert.ToBase64String(encryptedData);
             }
 
             public  static  string  Decode( string  decryptString,  string  decryptKey)
             {
                 try
                 {
                     decryptKey = GF_GET.GetSubString(decryptKey, 32,  "" );
                     decryptKey = decryptKey.PadRight(32,  ' ' );
 
                     RijndaelManaged rijndaelProvider =  new  RijndaelManaged();
                     rijndaelProvider.Key = Encoding.UTF8.GetBytes(decryptKey);
                     rijndaelProvider.IV = Keys;
                     ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
 
                     byte [] inputData = Convert.FromBase64String(decryptString);
                     byte [] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
 
                     return  Encoding.UTF8.GetString(decryptedData);
                 }
                 catch
                 {
                     return  "" ;
                 }
 
             }
 
         }
 
         /// <summary> 
         /// 加密
         /// </summary> 
         public  class  DES
         {
             //默认密钥向量
             private  static  byte [] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
 
             /// <summary>
             /// DES加密字符串
             /// </summary>
             /// <param name="encryptString">待加密的字符串</param>
             /// <param name="encryptKey">加密密钥,要求为8位</param>
             /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
             public  static  string  Encode( string  encryptString,  string  encryptKey)
             {
                 encryptKey = GF_GET.GetSubString(encryptKey, 8,  "" );
                 encryptKey = encryptKey.PadRight(8,  ' ' );
                 byte [] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                 byte [] rgbIV = Keys;
                 byte [] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                 DESCryptoServiceProvider dCSP =  new  DESCryptoServiceProvider();
                 MemoryStream mStream =  new  MemoryStream();
                 CryptoStream cStream =  new  CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                 cStream.Write(inputByteArray, 0, inputByteArray.Length);
                 cStream.FlushFinalBlock();
                 return  Convert.ToBase64String(mStream.ToArray());
 
             }
 
             /// <summary>
             /// DES解密字符串
             /// </summary>
             /// <param name="decryptString">待解密的字符串</param>
             /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
             /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
             public  static  string  Decode( string  decryptString,  string  decryptKey)
             {
                 try
                 {
                     decryptKey = GF_GET.GetSubString(decryptKey, 8,  "" );
                     decryptKey = decryptKey.PadRight(8,  ' ' );
                     byte [] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
                     byte [] rgbIV = Keys;
                     byte [] inputByteArray = Convert.FromBase64String(decryptString);
                     DESCryptoServiceProvider DCSP =  new  DESCryptoServiceProvider();
 
                     MemoryStream mStream =  new  MemoryStream();
                     CryptoStream cStream =  new  CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                     cStream.Write(inputByteArray, 0, inputByteArray.Length);
                     cStream.FlushFinalBlock();
                     return  Encoding.UTF8.GetString(mStream.ToArray());
                 }
                 catch
                 {
                     return  "" ;
                 }
             }
         }
 
         /// <summary>
         /// MD5函数
         /// </summary>
         /// <param name="str">原始字符串</param>
         /// <returns>MD5结果</returns>
         public  static  string  MD5( string  str)
         {
             byte [] b = Encoding.UTF8.GetBytes(str);
             b =  new  MD5CryptoServiceProvider().ComputeHash(b);
             string  ret =  "" ;
             for  ( int  i = 0; i < b.Length; i++)
                 ret += b[i].ToString( "x" ).PadLeft(2,  '0' );
 
             return  ret;
         }
 
         /// <summary>
         /// SHA256函数
         /// </summary>
         /// /// <param name="str">原始字符串</param>
         /// <returns>SHA256结果</returns>
         public  static  string  SHA256( string  str)
         {
             byte [] SHA256Data = Encoding.UTF8.GetBytes(str);
             SHA256Managed Sha256 =  new  SHA256Managed();
             byte [] Result = Sha256.ComputeHash(SHA256Data);
             return  Convert.ToBase64String(Result);   //返回长度为44字节的字符串
         }
     }
C# code ?
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
     //读写INI
     public  class  GF_INI
     {
         [DllImport( "kernel32" )]
         private  static  extern  long  WritePrivateProfileString( string  section,  string  key,  string  val,  string  filePath);
         [DllImport( "kernel32" )]
         private  static  extern  int  GetPrivateProfileString( string  section,  string  key,  string  def, StringBuilder retVal,  int  size,  string  filePath);
         [DllImport( "kernel32.dll" )]
         public  static  extern  int  Beep( int  dwFreq,  int  dwDuration);
 
         //读ini
         public  static  void  iniFile_SetVal( string  in_filename,  string  Section,  string  Key,  string  Value)
         {
             WritePrivateProfileString(Section, Key, Value, in_filename);
         }
 
         //写INI
         public  static  string  iniFile_GetVal( string  in_filename,  string  Section,  string  Key)
         {
             StringBuilder temp =  new  StringBuilder(255);
             int  i = GetPrivateProfileString(Section, Key,  "" , temp, 255, in_filename);
             if  (i == 0)
                 return  "" ;
             else
                 return  temp.ToString();
         }
     }
C# code ?
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
     //硬件信息
     public  class  GF_Hardware
     {
         /// <summary>
         /// cpu序列号
         /// </summary>
         /// <returns></returns>
         public  static  string  getID_CpuId()
         {
             string  cpuInfo =  "" ; //cpu序列号
             ManagementClass cimobject =  new  ManagementClass( "Win32_Processor" );
             ManagementObjectCollection moc = cimobject.GetInstances();
             foreach  (ManagementObject mo  in  moc)
             {
                 cpuInfo = mo.Properties[ "ProcessorId" ].Value.ToString();
             }
             return  cpuInfo;
         }
 
         /// <summary>
         /// 硬盘ID号
         /// </summary>
         /// <returns></returns>
         public  static  string  getID_HardDiskId()
         {
             string  HDid =  "" ;
             ManagementClass cimobject =  new  ManagementClass( "Win32_DiskDrive" );
             ManagementObjectCollection moc = cimobject.GetInstances();
             foreach  (ManagementObject mo  in  moc)
             {
                 HDid = ( string )mo.Properties[ "Model" ].Value;
             }
             return  HDid;
         }
 
         /// <summary>
         /// 获取网卡MacAddress
         /// </summary>
         /// <returns></returns>
         public  static  string  getID_NetCardId()
         {
             string  NCid =  "" ;
             ManagementClass mc =  new  ManagementClass( "Win32_NetworkAdapterConfiguration" );
             ManagementObjectCollection moc = mc.GetInstances();
             foreach  (ManagementObject mo  in  moc)
             {
                 if  (( bool )mo[ "IPEnabled" ] ==  true )
                     NCid = mo[ "MacAddress" ].ToString();
                 mo.Dispose();
             }
             return  NCid;
         }
 
 
         
     }
C# code ?
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
     //网络部分
     public  class  GF_Network
     {
         /*
          * C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)   
          * http://topic.csdn.net/u/20080619/08/dcef3fe2-f95b-4918-8edb-36d48a3d0528_2.html
         
          */
 
 
         /// <summary>
         /// 获取IP地址 返回第一个
         /// </summary>
         /// <returns></returns>
         public  static  string  getIP_This()
         {
             IPHostEntry hostInfo = Dns.GetHostEntry(Dns.GetHostName());
             IPAddress[] address = hostInfo.AddressList;
             if  (address.Length == 0)
                 return  "" ;
             else
                 return  address[0].ToString();
         }
 
         /// <summary>
         /// ping IP地址 timeout 局域网用200,广域网用2000
         /// </summary>
         /// <param name="ip">IP地址</param>
         /// <param name="timeout">超时 毫秒</param>
         /// <returns></returns>
         public  static  bool  ping( string  ip,  int  timeout)
         {            
             IPAddress ipadd;
             if  (!IPAddress.TryParse(ip,  out  ipadd))
             {
                 return  false ;   
             }
             Ping pingSender =  new  Ping();
             PingReply reply = pingSender.Send(ip, timeout,  new  Byte[] { Convert.ToByte(1) });
             if  (reply.Status == IPStatus.Success)
                 return  true ;
             else
                 return  false ;
         }
         /// <summary>
         /// 判读是否是IP地址
         /// </summary>
         /// <param name="in_str"></param>
         /// <returns></returns>
         public  static  bool  IsIPStr( string  in_str)
         {
             if  (in_str.Replace( "." "" ).Length != in_str.Length - 3)
                 return  false ;
             try
             {
                 IPAddress ip = IPAddress.Parse(in_str);
                 return  true ;
             }
             catch
             {
                 return  false ;
             }
         }
 
  
     }
C# code ?
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
  //读写INI
     public  class  GF_INI
     {
         [DllImport( "kernel32" )]
         private  static  extern  long  WritePrivateProfileString( string  section,  string  key,  string  val,  string  filePath);
         [DllImport( "kernel32" )]
         private  static  extern  int  GetPrivateProfileString( string  section,  string  key,  string  def, StringBuilder retVal,  int  size,  string  filePath);
         [DllImport( "kernel32.dll" )]
         public  static  extern  int  Beep( int  dwFreq,  int  dwDuration);
 
         //读ini
         public  static  void  iniFile_SetVal( string  in_filename,  string  Section,  string  Key,  string  Value)
         {
             WritePrivateProfileString(Section, Key, Value, in_filename);
         }
 
         //写INI
         public  static  string  iniFile_GetVal( string  in_filename,  string  Section,  string  Key)
         {
             StringBuilder temp =  new  StringBuilder(255);
             int  i = GetPrivateProfileString(Section, Key,  "" , temp, 255, in_filename);
             if  (i == 0)
                 return  "" ;
             else
                 return  temp.ToString();
         }
     }
C# code ?
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
     //文件操作
     public  class  GF_File
     {
 
         /// <summary>
         /// 写日志文件
         /// </summary>
         /// <param name="sPath">    年月  例  2011-04</param>
         /// <param name="sFileName">月日  例  04-22</param>
         /// <param name="content">时间+  内容</param>
         /// <returns></returns>
         public  static  bool  WriteLog( string  sPath,  string  sFileName,  string  content)
         {
             try
             {
 
                
                 StreamWriter sr;
                 if  (!Directory.Exists(sPath))
                 {
                     Directory.CreateDirectory(sPath);
                 }
                 string  v_filename = sPath+ "\\" + sFileName;
 
 
                 if  (!File.Exists(v_filename))  //如果文件存在,则创建File.AppendText对象
                 {
                     sr = File.CreateText(v_filename);
                     sr.Close();
                 }
                 using  (FileStream fs =  new  FileStream(v_filename, System.IO.FileMode.Append, System.IO.FileAccess.Write, System.IO.FileShare.Write))
                 {
                     using  (sr =  new  StreamWriter(fs))
                     {
                         
                         sr.WriteLine(DateTime.Now.ToString( "hh:mm:ss" )+ "     " + content);
                         sr.Close();
                     }
                     fs.Close();
                 }
                 return  true ;
 
             }
             catch  return  false ; }
         }
 
 
         /// <summary>
         /// 读取文本文件内容,每行存入arrayList 并返回arrayList对象
         /// </summary>
         /// <param name="sFileName"></param>
         /// <returns>arrayList</returns>
         public  static  ArrayList ReadFileRow( string  sFileName)
         {
             string  sLine =  "" ;
             ArrayList alTxt =  null ;
             try
             {
                 using  (StreamReader sr =  new  StreamReader(sFileName))
                 {
                     alTxt =  new  ArrayList();
 
                     while  (!sr.EndOfStream)
                     {
                         sLine = sr.ReadLine();
                         if  (sLine !=  "" )
                         {
                             alTxt.Add(sLine.Trim());
                         }
 
                     }
                     sr.Close();
                 }
             }
             catch
             {
 
             }
             return  alTxt;
         }
 
 
         /// <summary>
         /// 备份文件
         /// </summary>
         /// <param name="sourceFileName">源文件名</param>
         /// <param name="destFileName">目标文件名</param>
         /// <param name="overwrite">当目标文件存在时是否覆盖</param>
         /// <returns>操作是否成功</returns>
         public  static  bool  BackupFile( string  sourceFileName,  string  destFileName,  bool  overwrite)
         {
             if  (!System.IO.File.Exists(sourceFileName))
                 throw  new  FileNotFoundException(sourceFileName +  "文件不存在!" );
 
             if  (!overwrite && System.IO.File.Exists(destFileName))
                 return  false ;
 
             try
             {
                 System.IO.File.Copy(sourceFileName, destFileName,  true );
                 return  true ;
             }
             catch  (Exception e)
             {
                 throw  e;
             }
         }
 
 
         /// <summary>
         /// 备份文件,当目标文件存在时覆盖
         /// </summary>
         /// <param name="sourceFileName">源文件名</param>
         /// <param name="destFileName">目标文件名</param>
         /// <returns>操作是否成功</returns>
         public  static  bool  BackupFile( string  sourceFileName,  string  destFileName)
         {
             return  BackupFile(sourceFileName, destFileName,  true );
         }
 
 
         /// <summary>
         /// 恢复文件
         /// </summary>
         /// <param name="backupFileName">备份文件名</param>
         /// <param name="targetFileName">要恢复的文件名</param>
         /// <param name="backupTargetFileName">要恢复文件再次备份的名称,如果为null,则不再备份恢复文件</param>
         /// <returns>操作是否成功</returns>
         public  static  bool  RestoreFile( string  backupFileName,  string  targetFileName,  string  backupTargetFileName)
         {
             try
             {
                 if  (!System.IO.File.Exists(backupFileName))
                     throw  new  FileNotFoundException(backupFileName +  "文件不存在!" );
 
                 if  (backupTargetFileName !=  null )
                 {
                     if  (!System.IO.File.Exists(targetFileName))
                         throw  new  FileNotFoundException(targetFileName +  "文件不存在!无法备份此文件!" );
                     else
                         System.IO.File.Copy(targetFileName, backupTargetFileName,  true );
                 }
                 System.IO.File.Delete(targetFileName);
                 System.IO.File.Copy(backupFileName, targetFileName);
             }
             catch  (Exception e)
             {
                 throw  e;
             }
             return  true ;
         }
 
         public  static  bool  RestoreFile( string  backupFileName,  string  targetFileName)
         {
             return  RestoreFile(backupFileName, targetFileName,  null );
         }
     }
C# code ?
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
  //获取部分
     public  class  GF_GET
     {
         /// <summary>
         /// 根据坐标点获取屏幕图像
         /// </summary>
         /// <param name="x1">左上角横坐标</param>
         /// <param name="y1">左上角纵坐标</param>
         /// <param name="x2">右下角横坐标</param>
         /// <param name="y2">右下角纵坐标</param>
         /// <returns></returns>
         public  static  Image GetScreen( int  x1,  int  y1,  int  x2,  int  y2)
         {
             int  w = (x2 - x1);
             int  h = (y2 - y1);
             Image myImage =  new  Bitmap(w, h);
             Graphics g = Graphics.FromImage(myImage);
             g.CopyFromScreen( new  Point(x1, y1),  new  Point(0, 0),  new  Size(w, h));
             IntPtr dc1 = g.GetHdc();
             g.ReleaseHdc(dc1);
             return  myImage;
         }
 
         /// <summary>
         /// 获取指定文件的扩展名 例:  .txt
         /// </summary>
         /// <param name="fileName">指定文件名</param>
         /// <returns>扩展名</returns>
         public  static  string  GetFileExtName( string  fileName)
         {
             if  (GF_IsOk.IsStrNullOrEmpty(fileName) || fileName.IndexOf( '.' ) <= 0)
                 return  "" ;
             
             fileName = fileName.ToLower().Trim();       
 
             
             return  fileName.Substring(fileName.LastIndexOf( '.' ), fileName.Length - fileName.LastIndexOf( '.' ));
         }
 
         public  static  string  GetSubString( string  p_SrcString,  int  p_Length,  string  p_TailString)
         {
             return  GetSubString(p_SrcString, 0, p_Length, p_TailString);
         }
 
         public  static  string  GetUnicodeSubString( string  str,  int  len,  string  p_TailString)
         {
             string  result =  string .Empty; // 最终返回的结果
             int  byteLen = System.Text.Encoding.Default.GetByteCount(str); // 单字节字符长度
             int  charLen = str.Length; // 把字符平等对待时的字符串长度
             int  byteCount = 0; // 记录读取进度
             int  pos = 0; // 记录截取位置
             if  (byteLen > len)
             {
                 for  ( int  i = 0; i < charLen; i++)
                 {
                     if  (Convert.ToInt32(str.ToCharArray()[i]) > 255) // 按中文字符计算加2
                         byteCount += 2;
                     else // 按英文字符计算加1
                         byteCount += 1;
                     if  (byteCount > len) // 超出时只记下上一个有效位置
                     {
                         pos = i;
                         break ;
                     }
                     else  if  (byteCount == len) // 记下当前位置
                     {
                         pos = i + 1;
                         break ;
                     }
                 }
 
                 if  (pos >= 0)
                     result = str.Substring(0, pos) + p_TailString;
             }
             else
                 result = str;
 
             return  result;
         }
 
         /// <summary>
         /// 取指定长度的字符串
         /// </summary>
         /// <param name="p_SrcString">要检查的字符串</param>
         /// <param name="p_StartIndex">起始位置</param>
         /// <param name="p_Length">指定长度</param>
         /// <param name="p_TailString">用于替换的字符串</param>
         /// <returns>截取后的字符串</returns>
         public  static  string  GetSubString( string  p_SrcString,  int  p_StartIndex,  int  p_Length,  string  p_TailString)
         {
             string  myResult = p_SrcString;
 
             Byte[] bComments = Encoding.UTF8.GetBytes(p_SrcString);
             foreach  ( char  in  Encoding.UTF8.GetChars(bComments))
             {     //当是日文或韩文时(注:中文的范围:\u4e00 - \u9fa5, 日文在\u0800 - \u4e00, 韩文为\xAC00-\xD7A3)
                 if  ((c >  '\u0800'  && c <  '\u4e00' ) || (c >  '\xAC00'  && c <  '\xD7A3' ))
                 {
                     //if (System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[\u0800-\u4e00]+") || System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[\xAC00-\xD7A3]+"))
                     //当截取的起始位置超出字段串长度时
                     if  (p_StartIndex >= p_SrcString.Length)
                         return  "" ;
                     else
                         return  p_SrcString.Substring(p_StartIndex,
                                                        ((p_Length + p_StartIndex) > p_SrcString.Length) ? (p_SrcString.Length - p_StartIndex) : p_Length);
                 }
             }
 
             if  (p_Length >= 0)
             {
                 byte [] bsSrcString = Encoding.Default.GetBytes(p_SrcString);
 
                 //当字符串长度大于起始位置
                 if  (bsSrcString.Length > p_StartIndex)
                 {
                     int  p_EndIndex = bsSrcString.Length;
 
                     //当要截取的长度在字符串的有效长度范围内
                     if  (bsSrcString.Length > (p_StartIndex + p_Length))
                     {
                         p_EndIndex = p_Length + p_StartIndex;
                     }
                     else
                     {    //当不在有效范围内时,只取到字符串的结尾
 
                         p_Length = bsSrcString.Length - p_StartIndex;
                         p_TailString =  "" ;
                     }
 
                     int  nRealLength = p_Length;
                     int [] anResultFlag =  new  int [p_Length];
                     byte [] bsResult =  null ;
 
                     int  nFlag = 0;
                     for  ( int  i = p_StartIndex; i < p_EndIndex; i++)
                     {
                         if  (bsSrcString[i] > 127)
                         {
                             nFlag++;
                             if  (nFlag == 3)
                                 nFlag = 1;
                         }
                         else
                             nFlag = 0;
 
                         anResultFlag[i] = nFlag;
                     }
 
                     if  ((bsSrcString[p_EndIndex - 1] > 127) && (anResultFlag[p_Length - 1] == 1))
                         nRealLength = p_Length + 1;
 
                     bsResult =  new  byte [nRealLength];
 
                     Array.Copy(bsSrcString, p_StartIndex, bsResult, 0, nRealLength);
 
                     myResult = Encoding.Default.GetString(bsResult);
                     myResult = myResult + p_TailString;
                 }
             }
 
             return  myResult;
         }
 
         /// <summary>
         /// 获取Email HostName 例 liyangfd@gmail.com   获取出来时@gmail.com
         /// </summary>
         /// <param name="strEmail"></param>
         /// <returns></returns>
         public  static  string  GetEmailHostName( string  strEmail)
         {
             if  (strEmail.IndexOf( "@" ) < 0)
             {
                 return  "" ;
             }
             return  strEmail.Substring(strEmail.LastIndexOf( "@" )).ToLower();
         }
 
         /// <summary>
         /// 返回URL中结尾的文件名
         /// </summary>       
         public  static  string  GetFilename( string  url)
         {
             if  (url ==  null )
             {
                 return  "" ;
             }
             string [] strs1 = url.Split( new  char [] {  '/'  });
             return  strs1[strs1.Length - 1].Split( new  char [] {  '?'  })[0];
         }
 
 
         /// <summary>
         /// 根据阿拉伯数字返回月份的名称(可更改为某种语言)
         /// </summary>   
         public  static  string [] Monthes
         {
             get
             {
                 return  new  string [] {  "January" "February" "March" "April" "May" "June" "July" "August" "September" "October" "November" "December"  };
             }
         }
C# code ?
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
     //判断部分
     public  class  GF_IsOk
     {
         /// <summary>
         /// 判读是否是IP地址
         /// </summary>
         /// <param name="in_str"></param>
         /// <returns></returns>
         public  static  bool  IsIPStr( string   in_str)
         {
             IPAddress ip;
             return  IPAddress.TryParse(in_str,  out  ip);
         }
 
         /// <summary>
         /// 判断是否是数字
         /// </summary>
         /// <param name="strNumber"></param>
         /// <returns></returns>
         public  static  bool  IsNumber( string  strNumber)
         {
 
             Regex objNotNumberPattern =  new  Regex( "[^0-9.-]" );
             Regex objTwoDotPattern =  new  Regex( "[0-9]*[.][0-9]*[.][0-9]*" );
             Regex objTwoMinusPattern =  new  Regex( "[0-9]*[-][0-9]*[-][0-9]*" );
             String strValidRealPattern =  "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$" ;
             String strValidIntegerPattern =  "^([-]|[0-9])[0-9]*$" ;
             Regex objNumberPattern =  new  Regex( "("  + strValidRealPattern +  ")|("  + strValidIntegerPattern +  ")" );
             return  !objNotNumberPattern.IsMatch(strNumber) &&
                    !objTwoDotPattern.IsMatch(strNumber) &&
                    !objTwoMinusPattern.IsMatch(strNumber) &&
                    objNumberPattern.IsMatch(strNumber);
         }
        
         /// <summary>
         ///  判断是否是日期字符串
         /// </summary>
         /// <param name="in_str"></param>
         /// <returns></returns>
         public  static  bool  IsDateStr_yyyymmdd( string  in_str)
         {
             if  (in_str ==  "" return  true ;
             if  (in_str.Length != 8)  return  false ;
             return  IsDateStr(in_str);
         }
 
         /// <summary>
         /// 判断是否是日期字符串
         /// </summary>
         /// <param name="in_str"></param>
         /// <returns></returns>
         public  static  bool  IsDateStr( string  in_str)
         {
             if  (in_str ==  "" return  true ;
             if  (in_str.Length == 8)
                 in_str = in_str.Substring(0, 4) +  "-"  + in_str.Substring(4, 2) +  "-"  + in_str.Substring(6, 2);
             DateTime dtDate;
             bool  bValid =  true ;
             try
             {
                 dtDate = DateTime.Parse(in_str);
             }
             catch  (FormatException)
             {
                 // 如果解析方法失败则表示不是日期性数据
                 bValid =  false ;
             }
             return  bValid;
         }
 
         /// <summary>
         /// 判断字符串中是否包含汉字,有返回true 否则为false
         /// </summary>
         /// <param name="str"></param>
         /// <returns></returns>
         public  static  bool  IsExistHanZi( string  str)
         {
             Regex reg =  new  Regex( @"[\u4e00-\u9fa5]" ); //正则表达式
             if  (reg.IsMatch(str))
             {
                 return  true ;
             }
             else
             {
                 return  false ;
             }
         }
 
 
         /// <summary>
         /// 字段串是否为Null或为""(空)
         /// </summary>
         /// <param name="str"></param>
         /// <returns></returns>
         public  static  bool  IsStrNullOrEmpty( string  str)
         {
             if  (str ==  null  || str.Trim() ==  string .Empty)
                 return  true ;
 
             return  false ;
         }
 
         /// <summary>
         /// 返回文件是否存在
         /// </summary>
         /// <param name="filename">文件名</param>
         /// <returns>是否存在</returns>
         public  static  bool  IsFileExists( string  filename)
         {
             return  System.IO.File.Exists(filename);
         }
 
 
         /// <summary>
         /// 检测是否符合email格式
         /// </summary>
         /// <param name="strEmail">要判断的email字符串</param>
         /// <returns>判断结果</returns>
         public  static  bool  IsValidEmail( string  strEmail)
         {
             return  Regex.IsMatch(strEmail,  @"^[\w\.]+([-]\w+)*@[A-Za-z0-9-_]+[\.][A-Za-z0-9-_]" );
         }
 
         public  static  bool  IsValidDoEmail( string  strEmail)
         {
             return  Regex.IsMatch(strEmail,  @"^@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$" );
         }
         /// <summary>
         /// 检测是否是正确的Url
         /// </summary>
         /// <param name="strUrl">要验证的Url</param>
         /// <returns>判断结果</returns>
         public  static  bool  IsURL( string  strUrl)
         {
             return  Regex.IsMatch(strUrl,  @"^(http|https)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{1,10}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$" );
         }
 
         /// <summary>
         /// 判断是否为base64字符串
         /// </summary>
         /// <param name="str"></param>
         /// <returns></returns>
         public  static  bool  IsBase64String( string  str)
         {
             //A-Z, a-z, 0-9, +, /, =
             return  Regex.IsMatch(str,  @"[A-Za-z0-9\+\/\=]" );
         }
 
         /// <summary>
         /// 检测是否有Sql危险字符
         /// </summary>
         /// <param name="str">要判断字符串</param>
         /// <returns>判断结果</returns>
         public  static  bool  IsSafeSqlString( string  str)
         {
             return  !Regex.IsMatch(str,  @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']" );
         }
 
 
 
 
 
     }
C# code ?
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
    /// <summary>
         /// 获得伪静态页码显示链接
         /// </summary>
         /// <param name="curPage">当前页数</param>
         /// <param name="countPage">总页数</param>
         /// <param name="url">超级链接地址</param>
         /// <param name="extendPage">周边页码显示个数上限</param>
         /// <returns>页码html</returns>
         public  static  string  GetStaticPageNumbers( int  curPage,  int  countPage,  string  url,  string  expname,  int  extendPage)
         {
             return  GetStaticPageNumbers(curPage, countPage, url, expname, extendPage, 0);
         }
 
 
         /// <summary>
         /// 获得伪静态页码显示链接
         /// </summary>
         /// <param name="curPage">当前页数</param>
         /// <param name="countPage">总页数</param>
         /// <param name="url">超级链接地址</param>
         /// <param name="extendPage">周边页码显示个数上限</param>
         /// <param name="forumrewrite">当前版块是否使用URL重写</param>
         /// <returns>页码html</returns>
         public  static  string  GetStaticPageNumbers( int  curPage,  int  countPage,  string  url,  string  expname,  int  extendPage,  int  forumrewrite)
         {
             int  startPage = 1;
             int  endPage = 1;
 
             string  t1 =  "<a href=\""  + url +  "-1"  + expname +  "\">&laquo;</a>" ;
             string  t2 =  "<a href=\""  + url +  "-"  + countPage + expname +  "\">&raquo;</a>" ;
 
             if  (forumrewrite == 1)
             {
                 t1 =  "<a href=\""  + url +  "/1/list"  + expname +  "\">&laquo;</a>" ;
                 t2 =  "<a href=\""  + url +  "/"  + countPage +  "/list"  + expname +  "\">&raquo;</a>" ;
             }
 
             if  (forumrewrite == 2)
             {
                 t1 =  "<a href=\""  + url +  "/\">&laquo;</a>" ;
                 t2 =  "<a href=\""  + url +  "/"  + countPage +  "/\">&raquo;</a>" ;
             }
 
             if  (countPage < 1) countPage = 1;
             if  (extendPage < 3) extendPage = 2;
 
             if  (countPage > extendPage)
             {
                 if  (curPage - (extendPage / 2) > 0)
                 {
                     if  (curPage + (extendPage / 2) < countPage)
                     {
                         startPage = curPage - (extendPage / 2);
                         endPage = startPage + extendPage - 1;
                     }
                     else
                     {
                         endPage = countPage;
                         startPage = endPage - extendPage + 1;
                         t2 =  "" ;
                     }
                 }
                 else
                 {
                     endPage = extendPage;
                     t1 =  "" ;
                 }
             }
             else
             {
                 startPage = 1;
                 endPage = countPage;
                 t1 =  "" ;
                 t2 =  "" ;
             }
 
             StringBuilder s =  new  StringBuilder( "" );
 
             s.Append(t1);
             for  ( int  i = startPage; i <= endPage; i++)
             {
                 if  (i == curPage)
                 {
                     s.Append( "<span>" );
                     s.Append(i);
                     s.Append( "</span>" );
                 }
                 else
                 {
                     s.Append( "<a href=\"" );
                     if  (forumrewrite == 1)
                     {
                         s.Append(url);
                         if  (i != 1)
                         {
                             s.Append( "/" );
                             s.Append(i);
                         }
                         s.Append( "/list" );
                         s.Append(expname);
                     }
                     else  if  (forumrewrite == 2)
                     {
                         s.Append(url);
                         s.Append( "/" );
                         if  (i != 1)
                         {
                             s.Append(i);
                             s.Append( "/" );
                         }
                     }
                     else
                     {
                         s.Append(url);
                         if  (i != 1)
                         {
                             s.Append( "-" );
                             s.Append(i);
                         }
                         s.Append(expname);
                     }
                     s.Append( "\">" );
                     s.Append(i);
                     s.Append( "</a>" );
                 }
             }
             s.Append(t2);
 
             return  s.ToString();
         }
 
 
         /// <summary>
         /// 获得帖子的伪静态页码显示链接
         /// </summary>
         /// <param name="expname"></param>
         /// <param name="countPage">总页数</param>
         /// <param name="url">超级链接地址</param>
         /// <param name="extendPage">周边页码显示个数上限</param>
         /// <returns>页码html</returns>
         public  static  string  GetPostPageNumbers( int  countPage,  string  url,  string  expname,  int  extendPage)
         {
             int  startPage = 1;
             int  endPage = 1;
             int  curPage = 1;
 
             string  t1 =  "<a href=\""  + url +  "-1"  + expname +  "\">&laquo;</a>" ;
             string  t2 =  "<a href=\""  + url +  "-"  + countPage + expname +  "\">&raquo;</a>" ;
 
             if  (countPage < 1) countPage = 1;
             if  (extendPage < 3) extendPage = 2;
 
             if  (countPage > extendPage)
             {
                 if  (curPage - (extendPage / 2) > 0)
                 {
                     if  (curPage + (extendPage / 2) < countPage)
                     {
                         startPage = curPage - (extendPage / 2);
                         endPage = startPage + extendPage - 1;
                     }
                     else
                     {
                         endPage = countPage;
                         startPage = endPage - extendPage + 1;
                         t2 =  "" ;
                     }
                 }
                 else
                 {
                     endPage = extendPage;
                     t1 =  "" ;
                 }
             }
             else
             {
                 startPage = 1;
                 endPage = countPage;
                 t1 =  "" ;
                 t2 =  "" ;
             }
 
             StringBuilder s =  new  StringBuilder( "" );
 
             s.Append(t1);
             for  ( int  i = startPage; i <= endPage; i++)
             {
                 s.Append( "<a href=\"" );
                 s.Append(url);
                 s.Append( "-" );
                 s.Append(i);
                 s.Append(expname);
                 s.Append( "\">" );
                 s.Append(i);
                 s.Append( "</a>" );
             }
             s.Append(t2);
 
             return  s.ToString();
         }
C# code ?
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
  /// <summary>
         /// 获得页码显示链接
         /// </summary>
         /// <param name="curPage">当前页数</param>
         /// <param name="countPage">总页数</param>
         /// <param name="url">超级链接地址</param>
         /// <param name="extendPage">周边页码显示个数上限</param>
         /// <returns>页码html</returns>
         public  static  string  GetPageNumbers( int  curPage,  int  countPage,  string  url,  int  extendPage)
         {
             return  GetPageNumbers(curPage, countPage, url, extendPage,  "page" );
         }
 
         /// <summary>
         /// 获得页码显示链接
         /// </summary>
         /// <param name="curPage">当前页数</param>
         /// <param name="countPage">总页数</param>
         /// <param name="url">超级链接地址</param>
         /// <param name="extendPage">周边页码显示个数上限</param>
         /// <param name="pagetag">页码标记</param>
         /// <returns>页码html</returns>
         public  static  string  GetPageNumbers( int  curPage,  int  countPage,  string  url,  int  extendPage,  string  pagetag)
         {
             return  GetPageNumbers(curPage, countPage, url, extendPage, pagetag,  null );
         }
 
         /// <summary>
         /// 获得页码显示链接
         /// </summary>
         /// <param name="curPage">当前页数</param>
         /// <param name="countPage">总页数</param>
         /// <param name="url">超级链接地址</param>
         /// <param name="extendPage">周边页码显示个数上限</param>
         /// <param name="pagetag">页码标记</param>
         /// <param name="anchor">锚点</param>
         /// <returns>页码html</returns>
         public  static  string  GetPageNumbers( int  curPage,  int  countPage,  string  url,  int  extendPage,  string  pagetag,  string  anchor)
         {
             if  (pagetag ==  "" )
                 pagetag =  "page" ;
             int  startPage = 1;
             int  endPage = 1;
 
             if  (url.IndexOf( "?" ) > 0)
                 url = url +  "&" ;
             else
                 url = url +  "?" ;
 
             string  t1 =  "<a href=\""  + url +  "&"  + pagetag +  "=1" ;
             string  t2 =  "<a href=\""  + url +  "&"  + pagetag +  "="  + countPage;
             if  (anchor !=  null )
             {
                 t1 += anchor;
                 t2 += anchor;
             }
             t1 +=  "\">&laquo;</a>" ;
             t2 +=  "\">&raquo;</a>" ;
 
             if  (countPage < 1)
                 countPage = 1;
             if  (extendPage < 3)
                 extendPage = 2;
 
             if  (countPage > extendPage)
             {
                 if  (curPage - (extendPage / 2) > 0)
                 {
                     if  (curPage + (extendPage / 2) < countPage)
                     {
                         startPage = curPage - (extendPage / 2);
                         endPage = startPage + extendPage - 1;
                     }
                     else
                     {
                         endPage = countPage;
                         startPage = endPage - extendPage + 1;
                         t2 =  "" ;
                     }
                 }
                 else
                 {
                     endPage = extendPage;
                     t1 =  "" ;
                 }
             }
             else
             {
                 startPage = 1;
                 endPage = countPage;
                 t1 =  "" ;
                 t2 =  "" ;
             }
 
             StringBuilder s =  new  StringBuilder( "" );
 
             s.Append(t1);
             for  ( int  i = startPage; i <= endPage; i++)
             {
                 if  (i == curPage)
                 {
                     s.Append( "<span>" );
                     s.Append(i);
                     s.Append( "</span>" );
                 }
                 else
                 {
                     s.Append( "<a href=\"" );
                     s.Append(url);
                     s.Append(pagetag);
                     s.Append( "=" );
                     s.Append(i);
                     if  (anchor !=  null )
                     {
                         s.Append(anchor);
                     }
                     s.Append( "\">" );
                     s.Append(i);
                     s.Append( "</a>" );
                 }
             }
             s.Append(t2);
 
             return  s.ToString();
         }
 
         /// <summary>
         /// 判断文件流是否为UTF8字符集
         /// </summary>
         /// <param name="sbInputStream">文件流</param>
         /// <returns>判断结果</returns>
         private  static  bool  IsUTF8(FileStream sbInputStream)
         {
             int  i;
             byte  cOctets;   // octets to go in this UTF-8 encoded character 
             byte  chr;
             bool  bAllAscii =  true ;
             long  iLen = sbInputStream.Length;
 
             cOctets = 0;
             for  (i = 0; i < iLen; i++)
             {
                 chr = ( byte )sbInputStream.ReadByte();
 
                 if  ((chr & 0x80) != 0) bAllAscii =  false ;
 
                 if  (cOctets == 0)
                 {
                     if  (chr >= 0x80)
                     {
                         do
                         {
                             chr <<= 1;
                             cOctets++;
                         }
                         while  ((chr & 0x80) != 0);
 
                         cOctets--;
                         if  (cOctets == 0)
                             return  false ;
                     }
                 }
                 else
                 {
                     if  ((chr & 0xC0) != 0x80)
                         return  false ;
 
                     cOctets--;
                 }
             }
 
             if  (cOctets > 0)
                 return  false ;
 
             if  (bAllAscii)
                 return  false ;
 
             return  true ;
         }
C# code ?
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
   //数据库
     public  class  GF_DA
     {
         /// <summary>
         /// 执行SQL语句 sConnStr 连接字符串,sql执行的sql命令 返回第一行第一列
         /// </summary>
         /// <param name="sConnStr"></param>
         /// <param name="sql"></param>
         /// <returns></returns>
         public  static  object  ExecSQL( string  sConnStr,  string  sql)
         {
             using  (SqlConnection conn =  new  SqlConnection(sConnStr))
             {
                 using  (SqlCommand cmd =  new  SqlCommand())
                 {
                     try
                     {
                         conn.Open();
                         cmd.Connection = conn;
                         cmd.CommandText = sql;
                         return  cmd.ExecuteScalar();
                     }
                     catch
                     {
                         return  null ;
                     }
                 }
 
             }
         }
 
         /// <summary>
         /// 执行SQL数组  
         /// </summary>
         /// <param name="sConnStr"></param>
         /// <param name="alSql"></param>
         /// <param name="iLen"></param>
         public  static  void  ExecSQL( string  sConnStr, ArrayList alSql,  int  iLen)
         {
             using  (SqlConnection conn =  new  SqlConnection(sConnStr))
             {
                 using  (SqlCommand cmd =  new  SqlCommand())
                 {
                     try
                     {
                         conn.Open();
                         cmd.Connection = conn;
                         for  ( int  i = 0; i < alSql.Count; i++)
                         {
                             cmd.CommandText = alSql[i].ToString();
                             cmd.ExecuteNonQuery();
                             
                         }
                     }
                     catch
                     {
 
                     }
                 }
 
             }
         }
 
         /// <summary>
         /// 填充数据 返回DataTable
         /// </summary>
         /// <param name="sConnStr"></param>
         /// <param name="sql"></param>
         /// <param name="sTableName"></param>
         /// <returns></returns>
         public  static  DataTable DataFill( string  sConnStr,  string  sql,  string  sTableName)
         {
             using  (SqlConnection conn =  new  SqlConnection(sConnStr))
             {
                 using  (SqlCommand cmd =  new  SqlCommand())
                 {
                     DataSet ds =  new  DataSet();
                     try
                     {
                         conn.Open();
                         cmd.Connection = conn;
                         cmd.CommandText = sql;
                         SqlDataAdapter ap =  new  SqlDataAdapter(cmd);
                         ap.Fill(ds, sTableName);
                         return  ds.Tables[0];
                     }
                     catch
                     {
                         return  null ;
                     }
                 }
 
 
             }
         }
     }

转载地址:http://bbs.csdn.net/topics/360193753?page=1















  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值