目前分類:C# (54)

瀏覽方式: 標題列表 簡短摘要

C#中使用string.Split方法來分割字符串的注意事項:
string.Split給我們提供了非常靈活的使用方式,但是如果使用不當,會造成錯誤,最近在做代碼審查時,看到大部分人這麼使用:

string s = “A|B|:|C:D";
string[] ss = s.Split(“|:|".ToCharArray());
//ss[0]: A
//ss[1]: B
//ss[2]:
//ss[3]:
//ss[4]: C
//ss[5]: D

其實他的本意是使用“|:|”將字符串分開的,目標是為了得到數組:“A | B”和“C:D”,但是沒有直接找到斯普利特(串)的重載,所有就是用了ToCharArray(),很顯然,得到的結果是錯誤的。

正確的用法為:

string[] ss1 = s.Split(new[] {“|:|"}, StringSplitOptions.None);
//ss1[0]: A|B
//ss1[1]: C:D

後一個參數,是標誌是否自動刪除空的數據。例如:“A | B |:| C:D|:|”做分割時,會返回三個數組,該數組的最後一個元素是空“”如果我們想過濾掉這些空的元素,可以使用參數:StringSplitOptions.RemoveEmptyEntries即:

string[] ss1 = s.Split(new[] {“|:|"}, StringSplitOptions.RemoveEmptyEntries);

例子:

s = “A|B|:|C:D|:|";
string[] ss1 = s.Split(new[] {“|:|"}, StringSplitOptions.RemoveEmptyEntries);
//ss1[0]: “A|B"
//ss1[1]: “C:D"

ss1 = s.Split(new[] { “|:|" }, StringSplitOptions.None);
//ss1[0]: “A|B"
//ss1[1]: “C:D"
//ss1[2]: “"

戮克 發表在 痞客邦 留言(0) 人氣()

1.需要匯入 System.Runtime.InteropServices 命名空間

2.宣告 ShowWindowAsync 函數

        [DllImport("user32.dll")]

        private static extern bool ShowWindowAsync(

            IntPtr hWnd,

            int nCmdShow

        );

3.宣告 ShowWindow函數

        [DllImport("user32.dll")]

戮克 發表在 痞客邦 留言(0) 人氣()

文章有参考http://www.cnblogs.com/zhxilin/archive/2013/03/20/2971331.html

 

下面以接入九幽数据统计插件为例

Step 1:如果是cocos2dx的话,每个版本不一样,比如3.6的话,已不支持wp8的,原因如下:

WP8: remove WP8 support because Angle don’t support WP8 any more

以3.3的版本为例,直接打开proj.wp8-xaml目录下的工程文件;

 

如果不是cocos2dx,那就创建一个directx and xaml 工程。

 

Step 2:

戮克 發表在 痞客邦 留言(0) 人氣()

原文链接:http://www.cnblogs.com/yilin/p/csharp-activex.html
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能, 以增强浏览器端的动态处理能力。通常ActiveX控件都是用C++或VB语言开发,本文介绍另一种方式,在.NET Framework平台上,使用C#语言开发ActiveX控件。
虽然本文通篇都在讲如何使用C#语言开发ActiveX控件,但我并不极力推荐使用这种技术,因为该技术存在明显的局限,即需要浏览器端安 装.NET Framework(版本取决于开发ActiveX控件使用的.NET Framework版本),该局限对于挑剔的互联网用户,几乎是不可接受的。所以,我建议以下几条均满足时,方可考虑使用该技术:
开发团队中没有人掌握使用C++/VB开发ActiveX控件技术; 该ActiveX控件不用于互联网; 用户对仅能使用IE浏览器访问表示可以接受; 用户对在浏览器端安装.NET Framework组件表示可以接受。 另外,我建议如果不是因为控件的依赖库基于更高版本的.NET Framework,或需要更高版本的.NET Framework提供的扩展功能(如需要WCF等),尽量在.NET Framework 2.0上开发ActiveX控件,因为.NET Framework 2.0只有20M,相比300M的.NET Framework 3.5和40M的.NET Framework 4.0都要小很多,对客户端操作系统的要求也要低很多,并且随着Windows版本的不断升级换代,Windows Vista以后的版本已经内置了.NET Framework 2.0。等到Windows XP系统寿终正寝之时,也将迎来该技术的春天。所以,别被我上面的建议夯退了,掌握该技术其实还是蛮有实用价值的,毕竟,C#高效的开发效率很有吸引力。
本文接下来将使用C#语言开发一个ActiveX控件,实现对浏览器端的MAC地址遍历功能;另外,提供一个在Web静态页面中调用该控件的测试实 例。本实例的开发环境为Visual Studio 2010旗舰版(SP1),目标框架为.NET Framework 2.0;浏览器端测试环境为Windows 7旗舰版,IE8。
控件开发 使用C#进行ActiveX控件开发过程其实很简单。首先,在解决方案中添加一个类库项目,目标框架使用.NET Framework 2.0,如图1所示:

X


图1创建ActiveX控件类库
此处有一个关键操作,需要设置类库项目属性->程序集信息->使程序集COM可见,如图2所示:

图2设置ActiveX控件类库程序集COM可见
ActiveX类库的内容大致包括两部分,IObjectSafety接口和实现该接口的控件类。考虑所有控件类都要实现IObjectSafety接口,可以将该接口的实现抽象为一个控件基类。
一、IObjectSafety接口
为了让ActiveX控件获得客户端的信任,控件类还需要实现一个名为“IObjectSafety”的接口。先创建该接口(注意,不能修改该接口的GUID值),接口内容如下:

1 [ComImport, Guid('CB5BDC81-93C1-11CF-8F20-00805F2CD064')] 2 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 3 public interface IObjectSafety 4 { 5 [PreserveSig] 6 int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions); 7 8 [PreserveSig()] 9 int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions); 10 } 
二、ActiveXControl控件基类

1 public abstract class ActiveXControl : IObjectSafety 2 { 3 #region IObjectSafety 成员 4 5 private const string _IID_IDispatch = '{00020400-0000-0000-C000-000000000046}'; 6 private const string _IID_IDispatchEx = '{a6ef9860-c720-11d0-9337-00a0c90dcaa9}'; 7 private const string _IID_IPersistStorage = '{0000010A-0000-0000-C000-000000000046}'; 8 private const string _IID_IPersistStream = '{00000109-0000-0000-C000-000000000046}'; 9 private const string _IID_IPersistPropertyBag ='{37D84F60-42CB-11CE-8135-00AA004BB851}'; 10 11 private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001; 12 private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002; 13 private const int S_OK = 0; 14 private const int E_FAIL = unchecked((int)0x80004005); 15 private const int E_NOINTERFACE = unchecked((int)0x80004002); 16 17 private bool _fSafeForScripting = true; 18 private bool _fSafeForInitializing = true; 19 20 21 public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions) 22 { 23 int Rslt = E_FAIL; 24 25 string strGUID = riid.ToString('B'); 26 pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; 27 switch (strGUID) 28 { 29 case _IID_IDispatch: 30 case _IID_IDispatchEx: 31 Rslt = S_OK; 32 pdwEnabledOptions = 0; 33 if (_fSafeForScripting == true) 34 pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER; 35 break; 36 case _IID_IPersistStorage: 37 case _IID_IPersistStream: 38 case _IID_IPersistPropertyBag: 39 Rslt = S_OK; 40 pdwEnabledOptions = 0; 41 if (_fSafeForInitializing == true) 42 pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA; 43 break; 44 default: 45 Rslt = E_NOINTERFACE; 46 break; 47 } 48 49 return Rslt; 50 } 51 52 public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions) 53 { 54 int Rslt = E_FAIL; 55 56 string strGUID = riid.ToString('B'); 57 switch (strGUID) 58 { 59 case _IID_IDispatch: 60 case _IID_IDispatchEx: 61 if (((dwEnabledOptions & dwOptionSetMask)== INTERFACESAFE_FOR_UNTRUSTED_CALLER) && 62 (_fSafeForScripting == true)) 63 Rslt = S_OK; 64 break; 65 case _IID_IPersistStorage: 66 case _IID_IPersistStream: 67 case _IID_IPersistPropertyBag: 68 if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && 69 (_fSafeForInitializing == true)) 70 Rslt = S_OK; 71 break; 72 default: 73 Rslt = E_NOINTERFACE; 74 break; 75 } 76 77 return Rslt; 78 } 79 80 #endregion 81 } 
三、MacActiveX控件类

1 [Guid('65D8E97F-D3E2-462A-B389-241D7C38C518')] 2 public class MacActiveX : ActiveXControl 3 { 4 public string GetMacAddress() 5 { 6var mc = new ManagementClass('Win32_NetworkAdapterConfiguration'); 7 var mos = mc.GetInstances(); 8 var sb = new StringBuilder(); 9 10 foreach (ManagementObject mo in mos) 11 { 12 var macAddress = mo['MacAddress']; 13 14 if (macAddress != null) 15 sb.AppendLine(macAddress.ToString()); 16 } 17 18 return sb.ToString(); 19 } 20 } 
注意,第一行指定的Guid值即为该ActiveX控件的唯一标识,请保证其唯一性。Guid的生成有多种方法,你可以在系统目录的Program Files目录搜索一个名为guidgen.exe的工具,用该工具产生;也可以写一段测试代码,调用Guid.NewGuid()方法产生;有的 Visual Studio版本也提供了快捷方式,在“工具->生成GUID”菜单下。另外,访问MAC需要添加对System.Management系统组件的 引用。
到此,控件类库的开发工作就做完了,整个实现过程确实很简单。


戮克 發表在 痞客邦 留言(0) 人氣()

转自:http://blog.163.com/kunkun0921@126/blog/static/1692043322013212112153620/?latestBlog

C# Coding的时候,常常涉及代码注释,常见的注释包括两类:
1)单行注释。格式:// Comments
2)多行注释。格式:/* Comments... */
C#引入了新的XML注释,即我们在某个函数前新起一行,输入///,VS.Net会自动增加XML格式的注释,这里整理一下可用的XML注释。
XML注释分为一级注释(Primary Tags)和二级注释(Secondary Tags),前者可以单独存在,后者必须包含在一级注释内部。
I 一级注释
1. <remarks>对类型进行描述,功能类似<summary>,据说建议使用<remarks>;
2. <summary>对共有类型的类、方法、属性或字段进行注释;
3. <value>主要用于属性的注释,表示属性的制的含义,可以配合<summary>使用;

戮克 發表在 痞客邦 留言(0) 人氣()

Calling wkhtmltopdf to generate PDF from HTML 老外最多人加分的那篇做法,使用wkhtmtopdf(GPL协议)可以省很多程序代码, 首先到官网http://code.google.com/p/wkhtmltopdf/downloads/list 
找installer.exe下载

wkhtmltopdf,一个集成好了的exe文件(C++编写),基本的调用方法是, wkhtmltopdf.exe http://passport.yupsky.com/ac 
count/register e:\yupskyreg.pdf

,可以先在命令行测试一下,有其他的需要可以在命令行通过wkhtmltopdf --help查询,如果是超长页的花,可以用命令

wkhtmltopdf.exe http://passport.yupsky.com/ac 
count/register e:\yupskyreg.pdf  -H --outline (-H是添加默认标题,--outline是添加pdf的左侧概要哦!)而且可以批量生成哦,中间用空格隔开image

 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
/*要引用以下命名空间*/ 
using System.Diagnostics; 
using System.IO;

public partial class _Default : System.Web.UI.Page 
{

//Button的Click事件(把Url的网页内容转成PDF) 
    protected void btn_execute_Click(object sender, EventArgs e) 
    {

        //因为Web 是多线程环境,避免甲产生的文件被乙下载去,所以档名都用唯一 
        string fileNameWithOutExtention = Guid.NewGuid().ToString();

        //执行wkhtmltopdf.exe 
        Process p = System.Diagnostics.Process.Start(@"D:\wkhtmltopdf\wkhtmltopdf.exe", @"http://msdn.microsoft.com/zh-cn D:\" + fileNameWithOutExtention + ".pdf");

戮克 發表在 痞客邦 留言(0) 人氣()

首先将网页内容整个抓取下来,数据放在byte[]中(网络上传输时形式是byte),进一步转化为String,以便于对其操作,实例如下:

private static string GetPageData(string url)
{
if (url == null || url.Trim() == "")
return null;
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
Byte[] pageData = wc.DownloadData(url);
return Encoding.Default.GetString(pageData);//.ASCII.GetString
}

戮克 發表在 痞客邦 留言(0) 人氣()

#region 根據出生日期得到年龄

/// <summary>

/// 根據出生日期得到年龄/// </summary>

/// <param>輸入出生日期</param>

/// <returns>傳回年龄</returns>

public string getAge(string strBirthday)

{

    string _age = "";   //年龄

 

    int _differYear;    //是否滿年

戮克 發表在 痞客邦 留言(0) 人氣()

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

戮克 發表在 痞客邦 留言(0) 人氣()

C 货币

2.5.ToString("C")

¥2.50

D 十进制数

25.ToString("D5")

00025

E 科学型

25000.ToString("E")

2.500000E+005

戮克 發表在 痞客邦 留言(0) 人氣()

//1.---------文件夹创建、移动、删除---------

//创建文件夹
Directory.CreateDirectory(Server.MapPath("a"));
Directory.CreateDirectory(Server.MapPath("b"));
Directory.CreateDirectory(Server.MapPath("c"));
//移动b到a
Directory.Move(Server.MapPath("b"), Server.MapPath("a\b"));
//删除c
Directory.Delete(Server.MapPath("c"));

戮克 發表在 痞客邦 留言(0) 人氣()

 

1.       创建项目

新建一个C# Windows窗体应用程序,命名为SystemTray

2.       添加NotifyIcon控件

拷贝一个图标文件到项目文件夹,拖动工具箱中的NotifyIcon控件到窗体中,在NotifyIcon1控件的属性页中将(Name)项改为TrayNotifyIcon,在Icon项中添加刚才拷贝的图标,Text项添加“系统托盘示例”。.

3.       更改主窗体图标和标题

在主窗体属性页中,在Icon项中添加刚才拷贝的图标,将Text项改为“系统托盘示例”。

4.       更改主窗体类名

在主窗体属性页中,将(Name)项改为SystemTrayForm

戮克 發表在 痞客邦 留言(0) 人氣()

Granados是一个基于.NET的SSH客户端库。它有以下特点:
1.Granados是一个C#的开源项目。源码地址:http://www.routrek.co.jp/support/download/varaterm/granados200.tar.gz
2.同时支持SSH1和SSH2。
3.Granados实现了AES, Blowfish, TripleDES, RSA, DSA等加密验证算法。
4.实现TCP协议连接。

如何使用Granados库

可惜的是Granados的文档几乎没有!所以只有从它的源码找到它的测试代码来看。总结步骤为:

1.工程中添加Routrek.granados.dll(下载的包里有)的引用。

2.添加Reader类,实现ISSHConnectionEventReceiver和ISSHChannelEventReceiver接口。首先引用命名空间:
using System.Threading;
 
using System.Diagnostics;
 
using System.Net;
 
using System.Net.Sockets;
 
using Routrek.Crypto;
 
using Routrek.SSHC;
 
using Routrek.SSHCV1;
 
using Routrek.SSHCV2;
 
using Routrek.Toolkit;
 
using Routrek.PKI;

Reader类实现如下:
class Reader : ISSHConnectionEventReceiver, ISSHChannelEventReceiver
    
{
         
public SSHConnection _conn;
         
public bool _ready;
 
         
public void OnData(byte[] data, int offset, int length)
        
{
             System.Console.Write(Encoding.ASCII.GetString(data, offset, length));
         }

         
public void OnDebugMessage(bool always_display, byte[] data)
        
{
             Debug.WriteLine(
"DEBUG: " + Encoding.ASCII.GetString(data));
         }

         
public void OnIgnoreMessage(byte[] data)
        
{
             Debug.WriteLine(
"Ignore: " + Encoding.ASCII.GetString(data));
         }

         
public void OnAuthenticationPrompt(string[] msg)
        
{
             Debug.WriteLine(
"Auth Prompt " + msg[0]);
         }

 
         
public void OnError(Exception error, string msg)
        
{
             Debug.WriteLine(
"ERROR: " + msg);
         }

         
public void OnChannelClosed()
        
{
             Debug.WriteLine(
"Channel closed");
             _conn.Disconnect(
"");
             
//_conn.AsyncReceive(this);
 
        }

         
public void OnChannelEOF()
        
{
             _pf.Close();
             Debug.WriteLine(
"Channel EOF");
         }

         
public void OnExtendedData(int type, byte[] data)
        
{
             Debug.WriteLine(
"EXTENDED DATA");
         }

         
public void OnConnectionClosed()
        
{
             Debug.WriteLine(
"Connection closed");
         }

         
public void OnUnknownMessage(byte type, byte[] data)
        
{
             Debug.WriteLine(
"Unknown Message " + type);
         }

         
public void OnChannelReady()
        
{
             _ready 
= true;
         }

         
public void OnChannelError(Exception error, string msg)
        
{
             Debug.WriteLine(
"Channel ERROR: " + msg);
         }

         
public void OnMiscPacket(byte type, byte[] data, int offset, int length)
        
{
         }

 
         
public PortForwardingCheckResult CheckPortForwardingRequest(string host, int port, string originator_host, int originator_port)
        
{
             PortForwardingCheckResult r 
= new PortForwardingCheckResult();
             r.allowed 
= true;
             r.channel 
= this;
             
return r;
         }

         
public void EstablishPortforwarding(ISSHChannelEventReceiver rec, SSHChannel channel)
        
{
             _pf 
= channel;
         }

 
         
public SSHChannel _pf;
     }

3.好的,现在来测试一下:
class Program
    
{
         
private static SSHConnection _conn;
         
static void Main(string[] args)
        
{
             SSHConnectionParameter f 
= new SSHConnectionParameter();
             f.UserName 
= "root";
             f.Password 
= "****";
             f.Protocol 
= SSHProtocol.SSH2;
             f.AuthenticationType 
= AuthenticationType.Password;
             f.WindowSize 
= 0x1000;
             Reader reader 
= new Reader();
             Socket s 
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             s.Connect(
new IPEndPoint(IPAddress.Parse("192.168.x.x"), 22));
             _conn 
= SSHConnection.Connect(f, reader, s);
             reader._conn 
= _conn;
             SSHChannel ch 
= _conn.OpenShell(reader);
             reader._pf 
= ch;
             SSHConnectionInfo ci 
= _conn.ConnectionInfo;
 
             Thread.Sleep(
1000);
             
             
byte[] b = new byte[1];
             
while (true)
            
{
                 
int input = System.Console.Read();
                 b[
0= (byte)input;
                 reader._pf.Transmit(b);
             }

 
         }

     }

4.执行效果如下:
 

5.如果你需要快速的执行某些指定的命令,则可以把上面的
byte[] b = new byte[1];
  
while (true)
{
       
int input = System.Console.Read();
       b[
0= (byte)input;
       reader._pf.Transmit(b);
  }

替换为:
string cmd = "vi xxx.txtn";
 
byte[] data = (new UnicodeEncoding()).GetBytes(cmd);
 reader._pf.Transmit(data);

希望当你在找一个SSH库时这篇文章对你有所帮助,谢谢!

作者:CoderZhCoderZh的技术博客 - 博客园
微博:http://t.sina.com.cn/coderzh 
出处:http://coderzh.cnblogs.com
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

戮克 發表在 痞客邦 留言(0) 人氣()

Code:
  1. using System;   
  2. using System.Text;   
  3. using System.IO;   
  4. using Email.POP3;   
  5.   
  6. namespace TestPOP3   
  7. ...{   
  8.     class example   
  9.     ...{   
  10.         [STAThread]   
  11.         static void Main(string[] args)   
  12.         ...{   
  13.             //我测试的时候用的是163的邮箱,163的免费POP邮件服务器是pop.163.com。而163官方给出的是                       
  14.             //pop.126.com在这里不能用,原因是这个邮件服务器是有SSL加密的,GMAIL我也测试了也不能用都是这个原因   
  15.             POP3 objPOP3 = new POP3("pop.163.com", 110, "用户名""密码");   
  16.             Console.WriteLine(objPOP3.Connect() ? "Connected" : "Can't connect");   
  17.             try  
  18.             ...{   
  19.                 if (objPOP3.IsAPOPSupported)   
  20.                 ...{   
  21.                     Console.WriteLine(objPOP3.SecureLogin() ? "Secure Logged in" : "Can't login");   
  22.                 }   
  23.                 else  
  24.                 ...{   
  25.                     Console.WriteLine(objPOP3.Login() ? "Logged in" : "Can't login");   
  26.                 }   
  27.                 objPOP3.QueryServer();   
  28.                 Console.WriteLine("Emails count: " + objPOP3.TotalMailCount);   
  29.                 //以下的FOR循环是显示出所有收件箱里面的邮件信息   
  30.                 for (int i = 1; i <= objPOP3.TotalMailCount; i++)   
  31.                 ...{   
  32.                     EmailMessage objEmail = objPOP3.GetMessage(i, false); // use true to get headers only   
  33.                     Console.WriteLine("NEW MESSAGE:------------------");   
  34.                     Console.WriteLine("FROM: " + objEmail.From);   
  35.                     Console.WriteLine("TO: " + objEmail.To);   
  36.                     Console.WriteLine("CC: " + objEmail.Cc);   
  37.                     Console.WriteLine("SUBJECT: " + objEmail.Subject);   
  38.                     Console.WriteLine("DATE: " + objEmail.Date);   
  39.                     Console.WriteLine("CONTENT-TYPE: " + objEmail.ContentType);   
  40.                     Console.WriteLine("CHARSET: " + objEmail.Charset);   
  41.                     Console.WriteLine("MESSAGE-ID: " + objEmail.GetCustomHeader("Message-ID"));    
  42.                     Console.WriteLine("MESSAGE SIZE: " + objEmail.Size);   
  43.                     if (objEmail.IsAnyAttachments)   
  44.                     ...{   
  45.                         for (int a = 0; a < objEmail.Attachments.Count; a++)   
  46.                         ...{   
  47.                             //调用邮件附件的方法   
  48.                             processAttachment((Attachment)objEmail.Attachments[a], 1);   
  49.                         }   
  50.                     }   
  51.                     else  
  52.                     ...{   
  53.                         Console.WriteLine("BODY: " + Encoding.Default.GetString(Convert.FromBase64String(objEmail.Body)));   
  54.                     }   
  55.                     //下面注册掉的代码是删除该邮件   
  56.                     //objPOP3.DeleteMessage(i);   
  57.   
  58.                 }   
  59.                 objPOP3.Close();   
  60.             }   
  61.             catch (System.Exception e)   
  62.             ...{   
  63.                 Console.WriteLine(e.Message);   
  64.                 Console.ReadLine();   
  65.                 objPOP3.Close();   
  66.                 return;   
  67.             }   
  68.   
  69.         }   
  70.   
  71.         static void processAttachment(Attachment att, int nesting)   
  72.         ...{   
  73.             for(int i = 0; i < nesting * 2; i++) Console.Write("-");   
  74.   
  75.             //以下注释掉的代码可以打开,以下都是关于邮件附件的相关信息,因为我只需要得到附件的文件信息^_^   
  76.   
  77.             //Console.WriteLine("ATT: ");   
  78.             //Console.WriteLine("ContentTransferEncoding: " + att.ContentTransferEncoding);   
  79.             //Console.WriteLine("ContentType: " + att.ContentType);   
  80.             //Console.WriteLine("EstimatedSize: " + att.EstimatedSize);   
  81.             //Console.WriteLine("FileName: " + att.FileName);   
  82.             //processBody("HtmlBody", att.HtmlBody);   
  83.             //processBody("TextBody", att.TextBody);   
  84.             //Console.WriteLine("IsAnyAttachments: " + att.IsAnyAttachments);   
  85.             //Console.WriteLine("IsFileAttachment: " + att.IsFileAttachment);   
  86.             if (att.IsAnyAttachments)   
  87.             ...{   
  88.                 for (int a = 0; a < att.Attachments.Count; a++)   
  89.                 ...{   
  90.                     processAttachment((Attachment)att.Attachments[a], nesting * 2);   
  91.                 }   
  92.             }   
  93.             if(att.IsFileAttachment)   
  94.             ...{   
  95.                 //这里说一下在保存邮件附件之前必须"c:/pop3"该文件夹是存在的,否则是保存不了的   
  96.                 att.Save(@"c:/pop3" + att.FileName);   
  97.                 Console.WriteLine("附件保存成功!附件名称为:" + att.FileName);   
  98.             }   
  99.         }   
  100.   
  101.         static void processBody(string bodytype, string body)   
  102.         ...{   
  103.             if (body == null)    
  104.             ...{   
  105.                 Console.WriteLine(bodytype + ": null");   
  106.                 return;   
  107.             }   
  108.             if (body.Length > 1000)   
  109.             ...{   
  110.                 Console.WriteLine(bodytype + ": " + body.Substring(0, 1000) + "...");   
  111.             }   
  112.             else  
  113.             ...{   
  114.                 Console.WriteLine(bodytype + ": " + body);   
  115.             }   
  116.         }   
  117.     }   
  118. }   
  119.   
  120.   
  121. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sy_litao/archive/2008/01/08/2030974.aspx  

戮克 發表在 痞客邦 留言(0) 人氣()

原文地址:C# int转换成byte数组原理作者:soso

C# int转换成byte数组原理

例如int 300,因为int占4字节,所以byte数组长度为4,先将300转换成二进制:

00000000 00000000 00000001 00101100,然后将每个字节转换成十进制由低到高存入byte数组中,所以最后结果是44 1 0 0 ,byte[0]=44 byte[1]=1 byte[2]=0 byte[3]=0

 

 

二进制转十进制,十进制转二进制的算法

位(bit)  一位二进制数,又称比特

字节(byte)  1B = 8b  内存存储的最小单元

戮克 發表在 痞客邦 留言(0) 人氣()

C#如何操控FTP

出处:http://www.cnblogs.com/rond/archive/2012/07/30/2611295.htmlhttp://www.cnblogs.com/rond

 

关于FTP的应用免不了要对FTP进行增删查改什么的。通过搜索,整理和修改,自己写了一个FTP的Helper类。此篇文章目的有二(2最近流行)。

    • 累积代码,方便自己以后查阅使用;
    • 分享代码,方便他人使用。

以下是类:

FtpHelper.cs

 以下是重点说明:

如何获取某一目录下的文件和文件夹列表。

由于FtpWebRequest类只提供了WebRequestMethods.Ftp.ListDirectory方式和WebRequestMethods.Ftp.ListDirectoryDetails方式。这个方法获取到的是包含文件列表和文件夹列表的信息。并不是单单只包含某一类。为此我们需要分析获取信息的特点。分析发现,对于文件夹会有“<DIR>”这一项,而文件没有。所以我们可以根据这个来区分。一下分别是获取文件列表和文件夹列表的代码:

获取文件夹:

复制代码
复制代码
/// <summary>
/// 从ftp服务器上获得文件夹列表
/// </summary>
/// <param name="RequedstPath">服务器下的相对路径</param>
/// <returns></returns>
public static List<string> GetDirctory(string RequedstPath)
{
    List<string> strs = new List<string>();
    try
    {
        string uri = path + RequedstPath;   //目标路径 path为服务器地址
        FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
        // ftp用户名和密码
        reqFTP.Credentials = new NetworkCredential(username, password);
        reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
        WebResponse response = reqFTP.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());//中文文件名

        string line = reader.ReadLine();
        while (line != null)
        {
            if (line.Contains("<DIR>"))
            {
                string msg = line.Substring(line.LastIndexOf("<DIR>")+5).Trim();
                strs.Add(msg);
            }
            line = reader.ReadLine();
        }
        reader.Close();
        response.Close();
        return strs;
    }
    catch (Exception ex)
    {
        Console.WriteLine("获取目录出错:" + ex.Message);
    }
    return strs;
}
复制代码

戮克 發表在 痞客邦 留言(0) 人氣()

转自
Win7Taskbar类
 
using System;
using System.Collections.Generic;
using System.Text;
using Shell32;
using System.IO;
 

戮克 發表在 痞客邦 留言(0) 人氣()

FileResult:可以响应任意文档的属性,包括二进制格式的数据,eg:图档,pdf,excel,zip,可以传入byte[],文档路径,Stream等不同的属性,让mvc将属性回传给客户端,除此之外,还能指定回传时的属性类别或指定客户端下载时要显示的文件名等。
 
实际分为三中:
FilePathResult:响应一个实体文档的属性
FileContentResult:回应一个byte[]的属性。
FileStreamResult:回应一个Stream属性。
 
file辅助方法可以自动选定以上不同的FileResult响应。
eg:r如果想通过Action输出一个放在App_data目录下的PNG图文件,
public ActionResult GetFile(){

戮克 發表在 痞客邦 留言(0) 人氣()

原文地址:C# Winform皮肤类库作者:唯⒈のs

IrisSkin2.dll和一些皮肤可以在http://download.csdn.net/source/314123获得。

通过IrisSkin2美化WinForm界面很简单,下面说一下步骤:

1、在VS左边的工具箱中点击右键,选择添加选项卡,然后输入一个名称,如“皮肤”。

 

2 、右键点击“皮肤”,选择“选择项”,然后在选择工具箱项中点击浏览,选择IrisSkin2.dll文件,然后确定。这样就会在“皮肤”选项中增加了一个项:SkinEngine

 

 

戮克 發表在 痞客邦 留言(0) 人氣()

很多常用的软件中,我们都可以看到分隔栏(Split或SplitContainer)的使用,而且可以点击然后收缩其中的某个面板,例如QQ游戏大厅:



.NET也提供了分隔栏控件(Split或SplitContainer),但是却不能实现点击收缩的功能,不过我们可以在它的基础上实现点击收缩的功能。下面就来详细介绍怎样实现分隔栏控件点击收缩的功能。

首先来看看最终需要实现的效果:



  现在说明一下实现分隔栏控件点击收缩的功能的原理,原理很简单:

1.       确定点击按钮在分割栏的位置(实现的时候是取分隔栏的中间位置),然后在分隔栏上把按钮画出来。

2.       实现一个属性(CollapsePanel),以便选择使哪一个面板收缩,SplitContainer控件有两个面板,分别是Panel1和Panel2。

3.       提供一个点击按钮的事件(CollapseClick),当点击按钮的时候响应这个事件,以方便处理点击操作,默认的处理就是收缩和展开面板。

4.       重点,处理SplitContainer控件的鼠标事件(OnMouseMove、OnMouseDown、OnMouseUp、OnMouseLeave),以便处理按钮的点击、是否允许拖动分隔栏和改变控件的鼠标指针样式。

下面是SplitContainer控件扩展后的类视图:



下面来看看中要的实现代码:

CollapsePanel属性:

[DefaultValue(typeof(CollapsePanel), "1")]

public CollapsePanel CollapsePanel

{

get { return _collapsePanel; }

set

{

if (_collapsePanel != value)

{

Expand();

_collapsePanel = value;

}

}

}

重写OnMouseMove方法:

protected override void OnMouseMove(MouseEventArgs e)

{

//如果鼠标的左键没有按下,重置HistTest

if (e.Button != MouseButtons.Left)

{

_histTest = HistTest.None;

}

Rectangle collapseRect = CollapseRect;

Point mousePoint = e.Location;

//鼠标在Button矩形里,并且不是在拖动

if (collapseRect.Contains(mousePoint) &&

_histTest != HistTest.Spliter)

{

base.Capture = false;

SetCursor(Cursors.Hand);

MouseState = ControlState.Hover;

return;

}//鼠标在分隔栏矩形里

else if (base.SplitterRectangle.Contains(mousePoint))

{

MouseState = ControlState.Normal;

//如果已经在按钮按下了鼠标或者已经收缩,就不允许拖动了

if (_histTest == HistTest.Button ||

(_collapsePanel != CollapsePanel.None &&

_spliterPanelState == SpliterPanelState.Collapsed))

{

base.Capture = false;

base.Cursor = Cursors.Default;

return;

}

//鼠标没有按下,设置Split光标

if (_histTest == HistTest.None &&

!base.IsSplitterFixed)

{

if (base.Orientation == Orientation.Horizontal)

{

SetCursor(Cursors.HSplit);

}

else

{

SetCursor(Cursors.VSplit);

}

return;

}

}

MouseState = ControlState.Normal;

//正在拖动分隔栏

if (_histTest == HistTest.Spliter &&

!base.IsSplitterFixed)

{

if (base.Orientation == Orientation.Horizontal)

{

SetCursor(Cursors.HSplit);

}

else

{

SetCursor(Cursors.VSplit);

}

base.OnMouseMove(e);

return;

}

base.Cursor = Cursors.Default;

base.OnMouseMove(e);

}

重写OnMouseDown方法:

protected override void OnMouseDown(MouseEventArgs e)

{

Rectangle collapseRect = CollapseRect;

Point mousePoint = e.Location;

if (collapseRect.Contains(mousePoint) ||

(_collapsePanel != CollapsePanel.None &&

_spliterPanelState == SpliterPanelState.Collapsed))

{

_histTest = HistTest.Button;

return;

}

if (base.SplitterRectangle.Contains(mousePoint))

{

_histTest = HistTest.Spliter;

}

base.OnMouseDown(e);

}

重写OnMouseUp方法:

protected override void OnMouseUp(MouseEventArgs e)

{

base.OnMouseUp(e);

base.Invalidate(base.SplitterRectangle);

Rectangle collapseRect = CollapseRect;

Point mousePoint = e.Location;

if (_histTest == HistTest.Button &&

e.Button == MouseButtons.Left &&

collapseRect.Contains(mousePoint))

{

OnCollapseClick(EventArgs.Empty);

}

_histTest = HistTest.None;

}

重写OnMouseLeave方法:

protected override void OnMouseLeave(EventArgs e)

{

base.Cursor = Cursors.Default;

MouseState = ControlState.Normal;

base.OnMouseLeave(e);

}

以上介绍SplitContainer控件的扩展,希望能对你了解扩展SplitContainer控件有所帮助。

声明:

本文版权归作者和CS 程序员之窗所有,欢迎转载,转载必须保留以下版权信息,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者:Starts_2000

出处:CS 程序员之窗 http://www.csharpwin.com。

你可以免费使用或修改提供的源代码,但请保留源代码中的版权信息,详情请查看:

CS程序员之窗开源协议 http://www.csharpwin.com/csol.html。

牛bb文章网欢迎您转载分享:http://www.niubb.net/a/2015/04-29/332432.html


戮克 發表在 痞客邦 留言(0) 人氣()

1 23