??xml version="1.0" encoding="utf-8" standalone="yes"?>
{
/// <summary>
/// Class1 的摘要说明?
/// </summary>
public class Stack//栈类
{
private int count=0;
private Node first=null;//定义首结?
public bool Empty
{
get
{
return(first==null);
}
}
public int Count
{
get
{
return count;
}
}
public object Pop()//入栈
{
if(first==null)
{
throw new InvalidOperationException("Can not pop from an empty stack;");
}
else
{
object temp=first.Value;
first=first.Next;
count--;
return temp;
}
}
public void push(object o)//出栈
{
first=new Node(o,first);
count++;
}
public Stack()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
class Node //l点c?
{
public Node Next;
public object Value;
public Node(object value):this(value,null){}
public Node(object value,Node next)
{
Next=next;
Value=value;
}
}
}
]]>
//using System;
//namespace BubbleSorter
//{
// public class BubbleSorter
// {
// public void Sort(int[] list)
// {
// int i,j,temp;
// bool done=false;
// j = 1;
// while((j<list.Length)&&(!done))
// {
// done=true;
// for(i=0;i<list.Length-j;i++)
// {
// if(list[i] > list[i+1])
// {
// done=false;
// temp=list[i];
// list[i]=list[i+1];
// list[i+1]=temp;
// }
// }
// j++;
// }
//
// }
// }
// public class MainClass
// {
// public static void Main()
// {
// int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
// BubbleSorter sh=new BubbleSorter();
// sh.Sort(iArrary);
// for(int m=0;m<iArrary.Length;m++)
// Console.Write("{0} ",iArrary[m]);
// Console.WriteLine();
// }
// }
//}
////选择排序
//using System;
//
//namespace SelectionSorter{
// public class SelectionSorter{
// private int min;
// public void Sort(int[] sort){
// for(int i = 0;i < sort.Length -1;i++){
// min = i;
// for(int j = i + 1;j < sort.Length;j++){
// if(sort[j] < sort[min]){
// min = j;
// }
// int t = sort[min];
// sort[min] = sort[i];
// sort[i] = t;
// }
// }
// }
//
// }
// public class MainClass{
// public static void Main(){
// int[] iArray = new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
// SelectionSorter ss = new SelectionSorter();
// ss.Sort(iArray);
// for(int m =0;m < iArray.Length;m++)
// Console.Write(iArray[m] + " ");
// Console.Read();
//
// }
// }
//}
//
////插入排序
//using System;
//namespace hc{
// public class InsertSort{
// public void sort(int[] list){
// for(int i = 1;i < list.Length;i++){
// int t = list[i];
// int j = i;
// while((j > 0)&&(list[j-1] > t)){
// list[j] = list[j-1];
// --j;
// }
// list[j] = t;
// }
// }
// }
// public class MainClass{
// public static void Main(){
// int[] iArrary=new int[]{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
// InsertSort sort1 = new InsertSort();
// sort1.sort(iArrary);
// for(int m = 0;m < iArrary.Length;m++){
// Console.WriteLine(iArrary[m]);
// }
// }
// }
//}
////希尔排序,希尔排序是将l分D?q行插入排序.
//using System;
//namespace hc{
// public class ShellSort{
// public void Sort(int[] list){
// int i;
// for(i = 0; i <= list.Length/9;i=3*i+1);
// for(;i > 0;i/=3)
// { for(int j = i + 1;j <= list.Length;j+=i){
// int t = list[j-1];
// int m = j;
// while((m > i)&&(list[m-i-1] > t)){
// list[m-1] = list[m-i-1];
// m -=i;
// }
// list[m-1] = t;
// }
// }
// }
//
// }
// public class MainClass{
//
// public static void Main()
// {
// int[] iArrary=new int[]{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
// ShellSort sr = new ShellSort();
// sr.Sort(iArrary);
// for(int i =0;i < iArrary.Length;i++)
// Console.WriteLine(iArrary[i]);
// Console.Read();
// }
// }
//}
////八皇后问?br />//using System;
//namespace hc{
// class Queen
// {
// const int SIZE = 8;//皇后?br />// public static void Main()
// {
// int[] Queen = new int [SIZE];//每行皇后的位|?br />// int y,x,i,j,d,t=0;
// y = 0;
// Queen[0] = -1;
// while( true )
// {
// for (x=Queen[y]+1; x<SIZE; x++)
// {
// for (i=0;i<y;i++)
// {
// j = Queen[i];
// d = y-i;
// //查新皇后是否与以前的皇后能相互攻?br />// if ((j==x)||(j==x-d)||(j==x+d))
// break;
// }
// if (i>=y)
// break;//不攻?br />// }
// if (x == SIZE) //没有合适的位置
// {
// if (0==y)
// {
// //回朔CW一?br />// Console.WriteLine("Done");
// break; //l束
// }
// //回朔
// Queen[y]=-1;
// y--;
// }
// else
// {
// Queen[y]=x;//定皇后的位|?br />// y++;//下一个皇?br />// if (y<SIZE)
// Queen[y]=-1;
// else
// {
// //所有的皇后都排完了Q输?br />// Console.WriteLine("\n" + ++t +':');
// for(i=0;i<SIZE;i++)
// {
// for (j=0;j<SIZE;j++)
// if(Queen[i] == j)
// Console.Write('Q');
// else
// Console.Write('.');
// Console.WriteLine();
// }
// y = SIZE -1;//回朔
// }
// }
// }
// Console.Read();
// }
// }
//
//}
//
////快速排?br />//using System;
//namespace QuickSorter
//{
// public class QuickSorter
// {
// private void Swap(ref int l,ref int r)
// {
// int s;
// s=l;
// l=r;
// r=s;
// }
// public void Sort(int [] list,int low,int high)
// {
// int pivot;
// int l,r;
// int mid;
// if(high<=low)
// return;
// else if(high==low+1)
// {
// if(list[low]>list[high])
// Swap(ref list[low],ref list[high]);
// return;
// }
// mid=(low+high)>>1;
// pivot=list[mid];
// Swap(ref list[low],ref list[mid]);
// l=low+1;
// r=high;
// do
// {
// while(l<=r&&list[l]<pivot)
// l++;
// while(list[r]>=pivot)
// r--;
// if(l<r)
// Swap(ref list[l],ref list[r]);
// }while(l<r);
// list[low]=list[r];
// list[r]=pivot;
// if(low+1<r)
// Sort(list,low,r-1);
// if(r+1<high)
// Sort(list,r+1,high);
// }
// }
// public class MainClass
// {
// public static void Main()
// {
// int[] iArrary=new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
// QuickSorter q=new QuickSorter();
// q.Sort(iArrary,0,13);
// for(int m=0;m<=13;m++)
// Console.WriteLine("{0}",iArrary[m]);
// }
// }
//
//}
namespace Socket
{
/// <summary>
/// Form1 的摘要说明?br /> /// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
//声明监听U程对象
private Thread MyListenThread;
//声明|络监听对象
private TcpListener MyTcpListener;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.RichTextBox richTextBox2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.ContextMenu contextMenu1;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.MenuItem menuItem3;
/// <summary>
/// 必需的设计器变量?br /> /// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows H体设计器支持所必需?br /> //
InitializeComponent();
//
// TODO: ?InitializeComponent 调用后添加Q何构造函C?br /> //
}
/// <summary>
/// 清理所有正在用的资源?br /> /// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows H体设计器生成的代码
/// <summary>
/// 设计器支持所需的方?- 不要使用代码~辑器修?br /> /// 此方法的内容?br /> /// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.richTextBox2 = new System.Windows.Forms.RichTextBox();
this.label3 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.contextMenu1 = new System.Windows.Forms.ContextMenu();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.menuItem3 = new System.Windows.Forms.MenuItem();
this.SuspendLayout();
//
// button1
//
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.ForeColor = System.Drawing.SystemColors.Menu;
this.button1.Location = new System.Drawing.Point(336, 432);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(96, 32);
this.button1.TabIndex = 0;
this.button1.Text = "发?;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.ForeColor = System.Drawing.SystemColors.Menu;
this.label1.Location = new System.Drawing.Point(88, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(66, 17);
this.label1.TabIndex = 1;
this.label1.Text = "q程L?;
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label2
//
this.label2.AutoSize = true;
this.label2.ForeColor = System.Drawing.SystemColors.Menu;
this.label2.Location = new System.Drawing.Point(280, 16);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(42, 17);
this.label2.TabIndex = 2;
this.label2.Text = "本机?;
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// textBox1
//
this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.textBox1.Location = new System.Drawing.Point(152, 16);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(104, 21);
this.textBox1.TabIndex = 3;
this.textBox1.Text = "";
//
// textBox2
//
this.textBox2.Anchor = System.Windows.Forms.AnchorStyles.None;
this.textBox2.BackColor = System.Drawing.SystemColors.Desktop;
this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBox2.Font = new System.Drawing.Font("Times New Roman", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.textBox2.ForeColor = System.Drawing.SystemColors.Menu;
this.textBox2.Location = new System.Drawing.Point(325, 16);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(104, 19);
this.textBox2.TabIndex = 4;
this.textBox2.Text = "";
this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// richTextBox1
//
this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.richTextBox1.ContextMenu = this.contextMenu1;
this.richTextBox1.Location = new System.Drawing.Point(8, 368);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical;
this.richTextBox1.Size = new System.Drawing.Size(312, 96);
this.richTextBox1.TabIndex = 5;
this.richTextBox1.Text = "";
this.richTextBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.richTextBox1_KeyDown);
this.richTextBox1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.richTextBox1_KeyUp);
//
// richTextBox2
//
this.richTextBox2.BackColor = System.Drawing.SystemColors.InactiveCaptionText;
this.richTextBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.richTextBox2.Location = new System.Drawing.Point(8, 48);
this.richTextBox2.Name = "richTextBox2";
this.richTextBox2.Size = new System.Drawing.Size(312, 280);
this.richTextBox2.TabIndex = 6;
this.richTextBox2.Text = "";
//
// label3
//
this.label3.ForeColor = System.Drawing.SystemColors.Menu;
this.label3.Location = new System.Drawing.Point(8, 336);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(96, 24);
this.label3.TabIndex = 8;
this.label3.Text = "要发送的内容";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label5
//
this.label5.AllowDrop = true;
this.label5.AutoSize = true;
this.label5.ForeColor = System.Drawing.SystemColors.Menu;
this.label5.Location = new System.Drawing.Point(8, 16);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(42, 17);
this.label5.TabIndex = 10;
this.label5.Text = "收发Q?;
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// button2
//
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button2.ForeColor = System.Drawing.SystemColors.Menu;
this.button2.Location = new System.Drawing.Point(256, 336);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(64, 24);
this.button2.TabIndex = 11;
this.button2.Text = "览囄";
this.button2.Visible = false;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.SystemColors.Control;
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(323, 48);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(125, 152);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 12;
this.pictureBox1.TabStop = false;
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
this.pictureBox1.DoubleClick += new System.EventHandler(this.pictureBox1_DoubleClick);
this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
//
// openFileDialog1
//
this.openFileDialog1.Filter = "All file(*.*)|*.*";
//
// contextMenu1
//
this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1,
this.menuItem2,
this.menuItem3});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.Text = "复制(&C)";
this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
//
// menuItem2
//
this.menuItem2.Index = 1;
this.menuItem2.Text = "_脓(&P)";
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
//
// menuItem3
//
this.menuItem3.Index = 2;
this.menuItem3.Text = "剪切(&T)";
this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.BackColor = System.Drawing.SystemColors.Desktop;
this.ClientSize = new System.Drawing.Size(450, 470);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.button2);
this.Controls.Add(this.label5);
this.Controls.Add(this.label3);
this.Controls.Add(this.richTextBox2);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.KeyPreview = true;
this.MaximizeBox = false;
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "QQ-ZGG";
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);
this.Load += new System.EventHandler(this.Form1_Load);
this.Closed += new System.EventHandler(this.Form1_Closed);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用E序的主入口炏V?br /> /// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
try
{
System.Net.IPHostEntry ss = Dns.GetHostByAddress(textBox1.Text);
label5.Text = ss.HostName.ToString();
}
catch(Exception er){
MessageBox.Show("没有扑ֈ该主机名Q?);
}
if(textBox1.Text.Length < 1 || textBox2.Text.Length < 1 || richTextBox1.Text.Trim().Length < 1){
return;
}
try{
// richTextBox1.Text = richTextBox1.Text.Substring(0,richTextBox1.TextLength - "\n".Length);
string MyMessage = textBox2.Text + ":" + richTextBox1.Text + "\n";
//Ҏ目标计算机地址建立q接
TcpClient MyTcpClient = new TcpClient(textBox1.Text,888);
// System.Net.Sockets.UdpClient MyUdpClient = new UdpClient(textBox1.Text,888);
//获得用网l访问数据流
NetworkStream MyTcpStream = MyTcpClient.GetStream();
StreamWriter MyStream = new StreamWriter(MyTcpStream);
//字W串写入?br /> MyStream.Write(MyMessage);
//缓冲数据写入基?br /> MyStream.Flush();
//关闭|络?br /> MyStream.Close();
MyTcpClient.Close();
richTextBox2.ReadOnly = false;
richTextBox2.AppendText(textBox2.Text + ":" + "\n" + richTextBox1.Text + "\n");
richTextBox2.ReadOnly = true;
richTextBox1.Clear();
richTextBox1.Focus(); // 得到焦点
}
catch(Exception err){
MessageBox.Show(err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
private void Key_Click(){
if(textBox1.Text.Length < 1 || textBox2.Text.Length < 1 || richTextBox1.Text.Trim().Length < 1)
{
return;
}
try
{
richTextBox1.Text = richTextBox1.Text.Substring(0,richTextBox1.TextLength - "\n".Length);
string MyMessage = textBox2.Text + ":" + richTextBox1.Text + "\n";
//Ҏ目标计算机地址建立q接
TcpClient MyTcpClient = new TcpClient(textBox1.Text,888);
// System.Net.Sockets.UdpClient MyUdpClient = new UdpClient(textBox1.Text,888);
//获得用网l访问数据流
NetworkStream MyTcpStream = MyTcpClient.GetStream();
StreamWriter MyStream = new StreamWriter(MyTcpStream);
//字W串写入?br /> MyStream.Write(MyMessage);
//缓冲数据写入基?br /> MyStream.Flush();
//关闭|络?br /> MyStream.Close();
MyTcpClient.Close();
richTextBox2.ReadOnly = false;
richTextBox2.AppendText(textBox2.Text + ":" + "\n" + richTextBox1.Text + "\n");
richTextBox2.ReadOnly = true;
richTextBox1.Clear();
richTextBox1.Focus(); // 得到焦点
}
catch(Exception err)
{
MessageBox.Show(err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
private void StartListen(){
try
{
MyTcpListener = new TcpListener(888);
//开始监?br /> MyTcpListener.Start();
while(true)
{
//获取TcpClient
TcpClient MyTcpClient = MyTcpListener.AcceptTcpClient();
// Socket s = MyTcpListener.AcceptSocket();
NetworkStream MyStream = MyTcpClient.GetStream();
Byte[] MyBytes = new Byte[1024];
int MyByteRead = MyStream.Read(MyBytes,0,MyBytes.Length);
string MyMessage = System.Text.Encoding.UTF8.GetString(MyBytes,0,MyByteRead);
textBox1.Text = MyMessage.Substring(0,MyMessage.LastIndexOf(":"));
this.Text = "QQ-ZGG:" + "来自" + textBox1.Text + "的呼叫!";
richTextBox2.ReadOnly = false;
richTextBox2.Text += MyMessage;
richTextBox2.ReadOnly = true;
}
}
catch(Exception err){
Console.WriteLine(err.Message);
}
}
private void Form1_Load(object sender, System.EventArgs e)
{
//开始监?br /> //创徏监听U程
string LocalHost = Dns.GetHostName();
textBox2.Text = LocalHost;
textBox2.ReadOnly = true;
MyListenThread = new Thread(new ThreadStart(StartListen));
//启动U程
MyListenThread.Start();
}
private void Form1_Closed(object sender, System.EventArgs e)
{
try
{
if(MyTcpListener!=null){
//关闭监听?br /> MyTcpListener.Stop();
}
if(MyListenThread != null){
if(MyListenThread.ThreadState == ThreadState.Running)
{
MyListenThread.Abort();
}
}
}
catch(Exception err){
MessageBox.Show(err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
}
private void richTextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{//使用快捷l合?br />
}
private void button2_Click(object sender, System.EventArgs e)
{
if(openFileDialog1.ShowDialog() == DialogResult.OK)
pictureBox1.Image = System.Drawing.Bitmap.FromFile(openFileDialog1.FileName);
}
private void richTextBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.Control == true)
{
switch (e.KeyCode)
{
case Keys.Enter:
// richTextBox1.Text = richTextBox1.Text + "\n";
Key_Click();
break;
default: break;
}
}
}
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
}
private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
}
private void pictureBox1_Click(object sender, System.EventArgs e)
{
}
private void pictureBox1_DoubleClick(object sender, System.EventArgs e)
{
// if(button2.Visible == false)
// button2.Visible = true;
// else
// button2.Visible = false;
button2_Click(sender,e);
}
private void menuItem1_Click(object sender, System.EventArgs e)
{
//copy
richTextBox1.Copy();
}
private void menuItem3_Click(object sender, System.EventArgs e)
{
richTextBox1.Cut();
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
richTextBox1.Paste();
}
}
}
要进行基于TCP协议的网l通讯Q首先必d立同q程L的连接,q接地址通常包括两部分——主机名和端口,?a >www.yesky.com:80中,www.yesky.com是L名,80指主机的80端口Q当ӞL名也可以用IP地址代替。当q接建立之后Q就可以使用q个q接d送和接收数据包,TCP协议的作用就是保证这些数据包能到辄点ƈ且能按照正确的顺序组装v来?
?net framework的类库(Class LibraryQ中Q提供了两个用于TCP|络通讯的类Q分别是TcpClient和TcpListener。由其英文意义显而易见,TcpClientcLZTCP协议的客Lc,而TcpListener是服务器端,监听(Listen)客户端传来的q接h。TcpClientc通过TCP协议与服务器q行通讯q获取信息,它的内部装了一个Socketcȝ实例Q这个Socket对象被用来用TCP协议向服务器h和获取数据。因Zq程L的交互是以数据流的Ş式出现的Q所以传输的数据可以使用.net framework中流处理技术读写。在我们下边的例子中Q你可以看到使用NetworkStreamcL作数据流的方法?
在下面的例子中,我们徏立一个时间服务器Q包括服务器端程序和客户端程序。服务器端监听客L的连接请求,建立q接以后向客L发送当前的pȝ旉?
先运行服务器端程序,下面截图昄了服务器端程序运行的状况Q?
然后q行客户端程序,客户端首先发送连接请求到服务器端Q服务器端回应后发送当前时间到客户端,q是客户端程序的截图Q?
发送完成后Q服务器端l等待下一ơ连接:
通过q个例子我们可以了解TcpClientcȝ基本用法Q要使用q个c,必须使用System.Net.Socket命名I间Q本例用到的三个命名I间如下Q?
using System;
using System.Net.Sockets;
using System.Text;//从字节数l中获取字符串时使用该命名空间中的类
首先讨论一下客LE序Q开始我们必d始化一个TcpClientcȝ实例Q?
TcpClient client = new TcpClient(hostName, portNum);
然后使用TcpClientcȝGetStream()Ҏ获取数据,q且用它初始化一个NetworkStreamcȝ实例Q?
NetworkStream ns = client.GetStream();
注意Q当使用L名和端口号初始化TcpClientcȝ实例Ӟ直到跟服务器建立了连接,q个实例才算真正建立Q程序才能往下执行。如果因为网l不通,服务器不存在Q服务器端口未开攄{原因而不能连接,E序抛出异常ƈ且中断执行?
建立数据之后,我们可以使用NetworkStreamcȝRead()Ҏ从流中读取数据,使用Write()Ҏ向流中写入数据。读取数据时Q首先应该徏立一个缓冲区Q具体的_是建立一个byte型的数组用来存放从流中读取的数据。Read()Ҏ的原型描q如下:
public override int Read(in byte[] buffer,int offset,int size)
buffer是缓冲数l,offset是数据(字节)在缓冲数l中存放的开始位|,size是读取的字节数目Q返回值是d的字节数。在本例中,单地使用该方法来d服务器反馈的信息Q?
byte[] bytes = new byte[1024];//建立~冲?
int bytesRead = ns.Read(bytes, 0, bytes.Length);//d字节?
然后昄到屏q上Q?
Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));
最后不要忘记关闭连接:
client.Close();
下面是本例完整的E序清单Q?
using System;
using System.Net.Sockets;
using System.Text;
namespace TcpClientExample
{
public class TcpTimeClient
{
private const int portNum = 13;//服务器端口,可以随意修改
private const string hostName = "127.0.0.1";//服务器地址Q?27.0.0.1指本?
[STAThread]
static void Main(string[] args)
{
try
{
Console.Write("Try to connect to "+hostName+":"+portNum.ToString()+"\r\n");
TcpClient client = new TcpClient(hostName, portNum);
NetworkStream ns = client.GetStream();
byte[] bytes = new byte[1024];
int bytesRead = ns.Read(bytes, 0, bytes.Length);
Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));
client.Close();
Console.ReadLine();//׃是控制台E序Q故Z清楚的看到结果,可以加上q句
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
上面q个例子清晰地演CZ客户端程序的~写要点Q下面我们讨Z下如何徏立服务器E序。这个例子将使用TcpListenerc,?3L口监听,一旦有客户端连接,立卛_客户端发送当前服务器的时间信息?
TcpListener的关键在于AcceptTcpClient()ҎQ该Ҏ检端口是否有未处理的q接hQ如果有未处理的q接hQ该Ҏ服务器同客户端徏立连接,q且q回一个TcpClient对象Q通过q个对象的GetStreamҎ建立同客L通讯的数据流。事实上QTcpListenerc还提供一个更为灵zȝҎAcceptSocket()Q当然灵zȝ代h是复杂,对于比较单的E序QAcceptTcpClient()已经_用了。此外,TcpListenercL供Start()Ҏ开始监听,提供Stop()Ҏ停止监听?
首先我们使用端口初始化一个TcpListener实例Qƈ且开始在13端口监听Q?
private const int portNum = 13;
TcpListener listener = new TcpListener(portNum);
listener.Start();//开始监?
如果有未处理的连接请求,使用AcceptTcpClientҎq行处理Qƈ且获取数据流Q?
TcpClient client = listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();
然后Q获取本机时_q保存在字节数组中,使用NetworkStream.Write()Ҏ写入数据,然后客户端就可以通过Read()Ҏ从数据流中获取这D信息:
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
ns.Write(byteTime, 0, byteTime.Length);
ns.Close();//不要忘记关闭数据和q接
client.Close();
服务器端E序完整的程序清单如下:
using System;
using System.Net.Sockets;
using System.Text;
namespace TimeServer
{
class TimeServer
{
private const int portNum = 13;
[STAThread]
static void Main(string[] args)
{
bool done = false;
TcpListener listener = new TcpListener(portNum);
listener.Start();
while (!done)
{
Console.Write("Waiting for connection...");
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Connection accepted.");
NetworkStream ns = client.GetStream();
byte[] byteTime = Encoding.ASCII.GetBytes(DateTime.Now.ToString());
try
{
ns.Write(byteTime, 0, byteTime.Length);
ns.Close();
client.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
listener.Stop();
}
}
}
把上面两D늨序分别编译运行,OKQ我们已l用C#实现了基于TCP协议的网l通讯Q怎么P很简单吧Q?
使用上面介绍的基本方法,我们可以很容易的~写Z些很有用的程序,如FTPQ电子邮件收发,点对点即旉讯{等Q你甚至可以自己~制一个QQ来!
2、Int32.Parse(变量) Int32.Parse("帔R")
字符型{?转ؓ32位数字型
3?变量.ToString()
字符型{?转ؓ字符?
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 K?2,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16q制)
12345.ToString("p"); //生成 1,234,500.00%
4、变?Length 数字?
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量Q?str是求的字串的变量名
5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转ؓ比特?
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比牚w度:
len = bytStr.Length;
6、System.Text.StringBuilder("")
字符串相加,Q?h不是也一PQ?
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和?);
7、变?Substring(参数1,参数2);
截取字串的一部分Q参?为左起始位数Q参?为截取几位?
如:string s1 = str.Substring(0,2);
8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远E用户IP地址
9、穿q代理服务器取远E用L实IP地址Q?
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
10?Session["变量"];
存取Session|
如,赋| Session["username"]="布什";
取| Object objName=Session["username"];
String strName=objName.ToString();
清空Q?Session.RemoveAll();
11、String str=Request.QueryString["变量"];
用超链接传送变量?
如在M中链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx中取|String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新徏节点?);
创徏XML文新节?
13、父节点.AppendChild(子节?Q?
新建的子节点加到XML文父节点下
14?父节?RemoveChild(节点);
删除节点
15、Response
Response.Write("字串")Q?
Response.Write(变量)Q?
向页面输出?
Response.Redirect("URL地址"Q;
跌{到URL指定的页?
16、char.IsWhiteSpce(字串变量Q位?——逻辑?
查指定位|是否空字符Q?
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //l果为:True, W一个字W是0位,2是第三个字符?
17、char.IsPunctuation('字符') --逻辑?
查字W是否是标点W号
如:Response.Write(char.IsPunctuation('A')); //q回QFalse
18?int)'字符'
把字W{为数字,查代码点Q注意是单引受?
如:
Response.Write((int)'?); //l果Z字的代码Q?0013
19?char)代码
把数字{为字W,查代码代表的字符?
如:
Response.Write((char)22269); //q回“国”字?
20?Trim()
清除字串前后I格
21 、字串变?Replace("子字?,"替换?)
字串替换
如:
string str="中国";
str=str.Replace("?,"?); //国字换为央?
Response.Write(str); //输出l果为“中央?
再如Q(q个非常实用Q?
string str="q是<script>脚本";
str=str.Replace("<","<font><</font>"); //左括h换ؓ<font> ?< ?</font> Q或换ؓ<Q但估计lXML存诸后,再提Z会还原)
Response.Write(str); //昄为:“这?lt;script>脚本?
如果不替换,<script>不昄Q如果是一D脚本,运行;而替换后Q脚本将不运行?
q段代码的h值在于:你可以让一个文本中的所有HTML标签失效Q全部显C出来,保护你的h交互性的站点?
具体实现Q将你的表单提交按钮脚本加上下面代码Q?
string strSubmit=label1.Text; //label1是你让用h交数据的控gID?
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit?
用此Ҏq可以简单实现UBB代码?
22、Math.Max(i,j)
取i与j中的最大?
?int x=Math.Max(5,10); // x取?10
加一点吧 23、字串对?.....
加一点吧
23、字串对比一般都? if(str1==str2){ } , 但还有别的方?
(1)?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }
(2)?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
(3)?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
24、IndexOf() 、LastIndexOf()
查找字串中指定字W或字串首次Q最后一ơ)出现的位|?q回索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q?
25、Insert()
在字串中指定索引位插入指定字W。如Q?
str1.Insert(1,"?);在str1的第二个字符处插入“字”,如果str1="中国"Q插入后为“中字国”;
26、PadLeft()、PadRight()
在字串左Q或叻I加空格或指定char字符Q字串辑ֈ指定长度Q如Q?
<%
string str1="中国?;
str1=str1.PadLeft(10,'1'); //无第二参Cؓ加空?
Response.Write(str1); //l果为?111111中国人?Q?字串长ؓ10
%>
27、Remove()
从指定位|开始删除指定数的字W?
字串Ҏ一般都? if(str1==str2){ } , 但还有别的方?
1?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }
2?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
3?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
IndexOf()
查找字串中指定字W或字串首次出现的位|?q首索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q?
1.9 取中文日期显C——年月日时分
string strY=currentTime.ToString("f"); //不显C秒
1.10 取中文日期显C_q月
string strYM=currentTime.ToString("y");
1.11 取中文日期显C_月日
string strMD=currentTime.ToString("m");
1.12 取当前年月日Q格式ؓQ?003-9-23
string strYMD=currentTime.ToString("d");
1.13 取当前时分,格式为:14Q?4
string strT=currentTime.ToString("t");
更新一下, 上面不能~辑Q?
c#.net函数和方法集(大家一h加啊)
1、DateTime 数字?
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分U?
currentTime=System.DateTime.Now;
1.2 取当前年
int q?currentTime.Year;
1.3 取当前月
int ?currentTime.Month;
1.4 取当前日
int ?currentTime.Day;
1.5 取当前时
int ?currentTime.Hour;
1.6 取当前分
int ?currentTime.Minute;
1.7 取当前秒
int U?currentTime.Second;
1.8 取当前毫U?
int 毫秒=currentTime.Millisecond;
Q变量可用中文)
1.9 取中文日期显C——年月日时分
string strY=currentTime.ToString("f"); //不显C秒
1.10 取中文日期显C_q月
string strYM=currentTime.ToString("y");
1.11 取中文日期显C_月日
string strMD=currentTime.ToString("m");
1.12 取中文年月日
string strYMD=currentTime.ToString("D");
1.13 取当前时分,格式为:14Q?4
string strT=currentTime.ToString("t");
1.14 取当前时_格式为:2003-09-23T14:46:48
string strT=currentTime.ToString("s");
1.15 取当前时_格式为:2003-09-23 14:48:30Z
string strT=currentTime.ToString("u");
1.16 取当前时_格式为:2003-09-23 14:48
string strT=currentTime.ToString("g");
1.17 取当前时_格式为:Tue, 23 Sep 2003 14:52:40 GMT
string strT=currentTime.ToString("r");
1.18获得当前旉 n 天后的日期时?
DateTime newDay = DateTime.Now.AddDays(100);
2、Int32.Parse(变量) Int32.Parse("帔R")
字符型{?转ؓ32位数字型
3?变量.ToString()
字符型{?转ؓ字符?
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 K?2,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16q制)
12345.ToString("p"); //生成 1,234,500.00%
4、变?Length 数字?
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量Q?str是求的字串的变量名
5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转ؓ比特?
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比牚w度:
len = bytStr.Length;
6、System.Text.StringBuilder("")
字符串相加,Q?h不是也一PQ?
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和?);
7、变?Substring(参数1,参数2);
截取字串的一部分Q参?为左起始位数Q参?为截取几位?
如:string s1 = str.Substring(0,2);
8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
?strong>q程用户IP地址
9、穿q代理服务器取远E用L实IP地址Q?
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
10?Session["变量"];
存取Session|
如,赋| Session["username"]="布什";
取| Object objName=Session["username"];
String strName=objName.ToString();
清空Q?Session.RemoveAll();
11、String str=Request.QueryString["变量"];
用超链接传送变量?
如在M中链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx中取|String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新徏节点?);
创徏XML文档新节?
13、父节点.AppendChild(子节?Q?
新建的子节点加到XML文父节点下
14?父节?RemoveChild(节点);
删除节点
15、Response
Response.Write("字串")Q?
Response.Write(变量)Q?
向页面输出?
Response.Redirect("URL地址"Q;
跌{到URL指定的页?
16、char.IsWhiteSpce(字串变量Q位?——逻辑?
查指定位|是否空字符Q?
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //l果为:True, W一个字W是0位,2是第三个字符?
17、char.IsPunctuation('字符') --逻辑?
查字W是否是标点W号
如:Response.Write(char.IsPunctuation('A')); //q回QFalse
18?int)'字符'
把字W{为数字,查代码点Q注意是单引受?
如:
Response.Write((int)'?); //l果Z字的代码Q?0013
19?char)代码
把数字{为字W,查代码代表的字符?
如:
Response.Write((char)22269); //q回“国”字?
20?Trim()
清除字串前后I格
21 、字串变?Replace("子字?,"替换?)
字串替换
如:
string str="中国";
str=str.Replace("?,"?); //国字换为央?
Response.Write(str); //输出l果为“中央?
再如Q(q个非常实用Q?
string str="q是<script>脚本";
str=str.Replace("<","<font><</font>"); //左括h换ؓ<font> ?< ?</font> Q或换ؓ<Q但估计lXML存诸后,再提Z会还原)
Response.Write(str); //昄为:“这?lt;script>脚本?
如果不替换,<script>不昄Q如果是一D脚本,运行;而替换后Q脚本将不运行?
q段代码的h值在于:你可以让一个文本中的所有HTML标签失效Q全部显C出来,保护你的h交互性的站点?
具体实现Q将你的表单提交按钮脚本加上下面代码Q?
string strSubmit=label1.Text; //label1是你让用h交数据的控gID?
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit?
用此Ҏq可以简单实现UBB代码?
22、Math.Max(i,j)
取i与j中的最大?
?int x=Math.Max(5,10); // x取?10
23、字串对比一般都? if(str1==str2){ } , 但还有别的方?
(1)?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }
(2)?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
(3)?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
24、IndexOf() 、LastIndexOf()
查找字串中指定字W或字串首次Q最后一ơ)出现的位|?q回索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q?
25、Insert()
在字串中指定索引位插入指定字W。如Q?
str1.Insert(1,"?);在str1的第二个字符处插入“字”,如果str1="中国"Q插入后为“中字国”;
26、PadLeft()、PadRight()
在字串左Q或叻I加空格或指定char字符Q字串辑ֈ指定长度Q如Q?
<%
string str1="中国?;
str1=str1.PadLeft(10,'1'); //无第二参Cؓ加空?
Response.Write(str1); //l果为?111111中国人?Q?字串长ؓ10
%>
27、Remove()
从指定位|开始删除指定数的字W?
<%
string str1="我是萨达姆的崇拜者之一";
Response.Write(str1.Remove(5,4)); //l果为“我是萨辑֧之一?
%>
下面是一些常见的问题Q?br /> 问题1Q?span style="COLOR: #2000ff">如何获取指定文g的基本信息;
解决ҎQ可以用FileInfocȝ相关属性:
FileInfo.ExistsQ获取指定文件是否存在;
FileInfo.NameQFileInfo.ExtensioinQ获取文件的名称和扩展名Q?br /> FileInfo.FullNameQ获取文件的全限定名Uͼ完整路径Q;
FileInfo.DirectoryQ获取文件所在目录,q回cd为DirectoryInfoQ?br /> FileInfo.DirectoryNameQ获取文件所在目录的路径Q完整\径)Q?br /> FileInfo.LengthQ获取文件的大小Q字节数Q;
FileInfo.IsReadOnlyQ获取文件是否只读;
FileInfo.AttributesQ获取或讄指定文g的属性,q回cd为FileAttributes枚DQ可以是多个值的l合Q见问题2Q;
FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTimeQ分别用于获取文件的创徏旉、访问时间、修Ҏ_
Q更多内容还请参考MSDNQ?br />
问题2Q?span style="COLOR: #2000ff">如何获取和设|文件的属性,比如只读、存、隐藏等Q?/span>
解决ҎQ?br /> 使用FileInfo.Attributes属性可以获取和讄文g的属性,该属性类型ؓFileAttributes枚DQ该枚D的每个DCZU属性,FileAttributes枚Dh属性(AttributeQFlagsAttributeQ所以该枚D的值可以进行组合,也就是一个文件可以同时拥有多个属性。下面看看具体的做法Q?br /> 获取属性,比如判断一个文件是否是只读的:
讄属性,比如d和移除一个文件的只读属性:
问题3Q?span style="COLOR: #2000ff">如何获取文g的版本信息(比如版本P版权声明Q公司名U等Q;
解决ҎQ?br /> 使用FileVersionInfoc,该类有大量的版本信息相关的属性。通过它的静态方法GetVersionInfo获得该类的一个实例,然后可以访问指定文件的版本信息了,非常方便。如FileVersion表示文g版本PLegalCopyright表示指定文g的版权声明,CompanyName表示指定文g的公司名U。(更多内容q请参考MSDNQ?/p>
问题4Q?span style="COLOR: #2000ff">如何判断两个文g的内Ҏ否相同(_匚wQ;
解决ҎQ?br /> 使用System.security.Cryptography.HashAlgorithmcMؓ每个文g生成一个哈希码Q然后比较两个哈希码是否一致?br /> 在比较文件内容的时候可以采用好几种Ҏ。例如,查文件的某一特定部分是否一_如果愿意Q你甚至可以逐字节读取文Ӟ逐字节进行比较。这两种Ҏ都是可以的,但在某些情况下,q是使用哈希码算法更为方ѝ?br /> 该算法ؓ一个文件生成一个小的(通常Uؓ20字节Q二q制”指U”(binary fingerprintQ。从l计学角度看Q不同的文g不可能生成相同的哈希码。事实上Q即使是一个很的改动Q比如,修改了源文g中的一个bitQ,也会?0Q的几率来改变哈希码中的每一个bit。因此,哈希码常常用于数据安全方面?br /> 要生成一个哈希码Q你必须首先创徏一个HashAlgorithm对象Q而这通常是调用HashAlgorithm.CreateҎ来完成的Q然后调用HashAlgorithm.ComputeHashҎQ它会返回一个存储哈希码的字节数l。代码如下:
问题5Q?span style="COLOR: #2000ff">如何获取指定目录的基本信息;
解决ҎQ可以用DirectoryInfocȝ相关属性和ҎQ?br /> DirectoryInfo.ExistsQ获取指定目录是否存在;
DirectoryInfo.NameQ获取目录的名称Q?br /> DirectoryInfo.FullNameQ获取目录的全限定名Uͼ完整路径Q;
DirectoryInfo.AttributesQ获取或讄指定目录的属性,q回cd为FileAttributes枚DQ可以是多个值的l合Q ?
DirectoryInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTimeQ分别用于获取目录的创徏旉、访问时间、修Ҏ_
DirectoryInfo.ParentQ获取目录的上目录Q返回类型ؓDirectoryInfoQ?br /> DirectoryInfo.RootQ获取目录的根目录,q回cd为DirectoryInfoQ?br />
问题6Q?span style="COLOR: #2000ff">如何获取指定目录包含的文件和子目录;
解决ҎQ?br /> DirectoryInfo.GetFiles()Q获取目录中Q不包含子目录)的文Ӟq回cd为FileInfo[]Q支持通配W查找;
DirectoryInfo.GetDirectories()Q获取目录(不包含子目录Q的子目录,
q回cd为DirectoryInfo[]Q支持通配W查找;
DirectoryInfo. GetFileSystemInfos()Q获取指定目录下Q不包含子目录)的文件和子目录,
q回cd为FileSystemInfo[]Q支持通配W查找;
问题7Q?span style="COLOR: #2000ff">如何获得指定目录的大;
解决ҎQ?br /> 查目录内的所有文Ӟ利用FileInfo.Length属性获取每个文件的大小Q然后进行合计,然后使用递归法处理所有的子目录的文gQ参考下面代码:
问题8Q?span style="COLOR: #2000ff">如何使用通配W搜索指定目录内的所有文Ӟ
解决ҎQ?br /> 使用DirectoryInfo.GetFilesҎ的重载版本,它可以接受一个过滤表辑ּQ返回FileInfo数组Q另外它的参数还可以指定是否对子目录q行查找。如Q?br />
问题9Q?span style="COLOR: #2000ff">如何复制、移动、重命名、删除文件和目录Q?/span>
解决ҎQ用FileInfo和DirectoryInfocR?br /> 下面是FileInfocȝ相关ҎQ?br /> FileInfo.CopyToQ将现有文g复制到新文gQ其重蝲版本q允许覆盖已存在文gQ?br /> FileInfo.MoveToQ将指定文gUdC|,q提供指定新文g名的选项Q所以可以用来重命名文gQ而不改变位置Q; FileInfo.DeleteQ永久删除文Ӟ如果文g不存在,则不执行M操作Q?br /> FileInfo.ReplaceQ用当前FileInfo对象对应文g的内Ҏ换目标文Ӟ而且指定另一个文件名作ؓ被替换文件的备䆾Q微软考虑实在周到?/p>
下面是DirectoryInfocȝ相关ҎQ?br /> DirectoryInfo.CreateQ创建指定目录,如果指定路径中有多目录不存在,该方法会一一创徏Q?br /> DirectoryInfo.CreateSubdirectoryQ创建当前对象对应的目录的子目录Q?br /> DirectoryInfo.MoveToQ将目录Q及其包含的内容Q移动至一个新的目录,也可用来重命名目录;
DirectoryInfo.DeleteQ删除目录(如果它存在的话)。如果要删除一个包含子目录的目录,要用它的重载版本,以指定递归删除?br />
注意C没有QDirectoryInfocd了一个CopyToҎQ不q我们可以通过递归来实现这个功能:
问题10Q?span style="COLOR: #2000ff">如何获得计算机的所有逻辑驱动器;
解决ҎQ用DriveInfoc(需?NET 2.0Q?br /> DriveInfo.GetDrives()Q获得计机的所有逻辑驱动器,q回cd为DriveInfo[]Q?
问题11Q?span style="COLOR: #2000ff">如何获取指定驱动器的信息Q?/span>
解决ҎQ?br /> DriveInfo.NameQ获取驱动器的名Uͼ如C:\Q;
DriveInfo.DriveTypeQ获取驱动器的类型(如FixedQCDRomQRemovableQNetwork{)Q?br /> DriveInfo.DriveFormatQ获取驱动器的格式(如NTFSQFAT32QCDFSQUDF{)Q?br /> DriveInfo.IsReadyQ获取驱动器是否已准备好Q比如CD是否已放入CD驱动器,如果驱动器没有准备好Q访问其信息会引发IOExceptioncd异常Q?br /> DriveInfo.AvailableFreeSpaceQ获取驱动器的可用空_
DriveInfo.TotalFreeSpaceQ获取驱动器ȝ可用I间Q它与AvailableFreeSpace的不同在于AvailableFreeSpace会磁盘配额的讄Q?br /> DriveInfo.TotalSizeQ获取驱动器ȝI间Q?br /> DriveInfo.RootDirectoryQ获得驱动器的根目录QDirectoryInfocdQ;
xQ我们已l了解了文g和目录相关的一些基本操作。但q不清楚如何去读写文件的内容Q下一中会详l了解这斚w的操作。?
文gd相关cMl?
文gd操作涉及的类主要是:
MarshalByRefObject c:允许在支持远E处理的应用E序中跨应用E序域边界访问对象;
BinaryReader c:用特定的~码基元数据类型读作二q制倹{?br /> BinaryWriter c: 以二q制形式基元类型写入流Qƈ支持用特定的~码写入字符丌Ӏ?br /> Stream c: 提供字节序列的一般视图?br /> FileStreamc:公开以文件ؓȝ StreamQ既支持同步d操作Q也支持异步d操作?br /> MemoryStream c:创徏其支持存储区为内存的?br /> BufferedStream c:l另一上的读写操作添加一个缓冲层?br /> TextReader c:表示可读取连l字W系列的阅读器?br /> TextWriter c:表示可以~写一个有序字W系列的~写器?br /> StreamReader c:实现一?TextReaderQ其以一U特定的~码从字节流中读取字W?br /> StreamWriter c:实现一?TextWriterQ其以一U特定的~码向流中写入字W?br /> StringReader c:实现从字W串q行d?TextReader?br /> StringWriter c:实现一个用于将信息写入字符串的 TextWriter。该信息存储在基StringBuilder中?br /> 在用它们之前最好能了解它们的承关p,有助于作出最合适的选择Q?br />
另外q要注意一下FileInfo和Filecȝ一些方法,如CreateQCreateTextQOpen{,有时也会带来方便?br /> q些cȝ内容比较J多Q更多内容还请参考MSDN。?
下面是一些常见的问题及其解决ҎQ?br /> 问题1Q?span style="COLOR: #2000ff">如何d文本文gQƈ考虑不同的编码类型)Q?br /> 解决ҎQ?br /> 创徏一个FileStream对象用以引用该文件。要写入文gQ将FileStream对象装在StreamWriter对象中,使用光载了的WriteҎQ要d文gQ将FileStream对象装在StreamReader对象中,使用其Read或ReadLineҎQ?br /> .NET Framework允许通过StreamWriter和StreamReadercL作Q何流来读写文本文件。当使用StreamWritercd入数据时Q调用它的WriteҎQ该Ҏ在重载后可以支持所有常见的C#数据cdQ包括字W串、字W、整数、QҎ以及十进制数{。但WriteҎM的得到的数据{换ؓ文本Q如果希望将q些文本转换回原来的数据cdQ应使用WriteLineҎQ以保每个值都处于单独的一行上?br /> 字符串的表现形式取决于你使用的编码,最常见的编码类型包括下面几U:ASCIIQUTF-16QUTF-7QUTF-8?br /> .NET Framework在System.Text命名I间中ؓ每种~码cd提供了一个类。在使用StreamWriter和StreamReadercLQ可以指定需要的~码cdQ或者用默认的UTF-8?br /> 而在d文本文gӞ则要使用StreamReadercȝRead或ReadLineҎ。ReadҎd单个字符或者指定个数的字符Q返回类型ؓ字符或字W数l;ReadLineҎ则返回包含整行内容的字符ԌReadToEndҎ从当前位|读取至的l尾?br /> Q更多内容还请参考MSDNQ?br /> 写入文本文g的示例:
问题6Q?span style="COLOR: #2000ff">监视文gpȝ的变?/span>Q?br /> 解决ҎQ?br /> 如果指定路径内的文g发生改变Q比如文件被修改或创建)Q你希望能对此作出反应?br /> 如果E序与其它多个程序或业务处理相关Q常帔R要创Z个程序,q且只有文gpȝ发生变化时它才处于活动状态。你可以创徏一个这LE序Q让它定期区指定目录,此时会发现有件事情让你苦|得频J,׃费多的系l资源;而检得少Q那么检到变化的时间就会越ѝ?br /> q时可以使用FileSystemWatcherlgQ指定要q行监视的目录或文gQƈ处理其CreatedQDeletedQRenamedQChanged事g?br /> 要用FileSystemWatcherlgQ首先要创徏它的一个实例,然后讄下列属性:
PathQ指定要监视的目录;
FilterQ指定要监视的文件类型,如?.txt”;
NotifyFilterQ指定要监视的变化类型;
FileSystemWatcher会引发四个关键的事gQCreatedQDeletedQRenamedQChanged。这些事仉在其FileSystemEventArgs参数中提供了相关文g的信息:如文件名Q\径,改变cdQRenamed事g中还可以了解到改变前的文件名和\径。如果要用q些事gQ则它的EnableRaisingEvents属性设|ؓfalse。CreatedQDeletedQRenamed三个事g比较Ҏ处理Q但Changed事g得当心了,你需要设|它的NotifyFilter属性以指示监视那些cd的变化。否则,E序会在文g被修ҎҎ在不断发生的事g中(~存区溢出)?br />
问题5Q?span style="COLOR: #2000ff">如何获得pȝ目录的的路径Q如桌面Q我的文,临时文g夹等Q;
解决ҎQ?br /> 主要是用System. Environmentcȝ相关属性和ҎQ?br /> Environment. SystemDirectory属性:获取pȝ目录的完全限定\径;
Environment. GetFolderPathҎQ该Ҏ接受的参数类型ؓEnvironment.SpecialFolder枚DQ?br /> 通过q个Ҏ可以获得大量pȝ文g夹的路径Q如我的电脑Q我的电脑,桌面Q系l目录等Q?br /> Q更多内容还请参考MSDNQ;
Path.GetTempPathҎQ返回当前系l的临时文g夹的路径Q?/p>
问题6Q?span style="COLOR: #2000ff">如何判断一个\径是l对路径q是相对路径Q?/span>
解决ҎQ?br /> 使用Path.IsPathRootedҎQ?/p>
问题7Q?span style="COLOR: #2000ff">如何d或设|当前目录;
解决ҎQ?br /> 使用DirectorycȝGetCurrentDirectory和SetCurrentDirectoryҎQ?/p>
问题8Q?span style="COLOR: #2000ff">如何使用相对路径Q?/span>
解决ҎQ?br /> 讄当前目录后(见问?Q,可以用相对\径了。对于一个相对\径,我们可以
使用Path.GetFullPathҎ获得它的完全限定路径Q绝对\径)?/p>
注意Q如果打用相对\径,你将工作目录讄为各个交互文件的共同LQ否则可能会引入
一些不易发现的安全隐患Q被恶意用户利用来访问系l文件?br />
更多内容Q?br /> 通常我们可以使用System.IO.PathcL处理路径。该cL供了一套方法和属性用于对包含文g或目录\径信息的字符串执行操作,q些操作是以跨^台的方式执行的,而这些方法和属性都是静态的?/p>
注意路径仅仅是提供文件或目录位置的字W串。\径不必指向磁盘上的位|,例如Q\径可以映到内存中或讑֤上的位置。\径的准确格式是由当前q_定的。例如,在某些系l上Q\径可以驱动器h卷号开始,而此元素在其他系l中是不存在的。在某些pȝ上,文g路径可以包含扩展名,扩展名指C在文g中存储的信息的类型。文件扩展名的格式是与^台相关的Q例如,某些pȝ扩展名的长度限制ؓ 3 个字W,而其他系l则没有q样的限制。当前^台还定用于分隔路径中各元素的字W集Q以及确定在指定路径时不能用的字符集。因些差异,所?Path cȝ字段以及 Path cȝ某些成员的准行为是与^台相关的?/p>
路径可以包含l对或相对位|信息。绝对\径完整指定一个位|:文g或目录可被唯一标识Q而与当前位置无关。相对\径指定部分位|:当定位用相对路径指定的文件时Q当前位|用作v始点?/p>
Pathcȝ大多数成员不与文件系l交互,q且不验证\径字W串指定的文件是否存在。修改\径字W串的Path cL员(例如 ChangeExtensionQ对文gpȝ中文件的名称没有影响。但Path成员实验证指定路径字符串的内容Qƈ且如果字W串包含在\径字W串中无效的字符Q如 InvalidPathChars 中的定义Q,则引?ArgumentException异常。例如,在基?Windows 的桌面^CQ无效\径字W可能包括引?(")、小于号 (<)、大于号 (>)、管道符?(|)、退?(\b)、空 (\0) 以及?16 ?18 和从 20 ?25?Unicode 字符?/p>
Path cȝ成员使您可以快速方便地执行常见操作Q例如确定文件扩展名是否是\径的一部分Q以及将两个字符串组合成一个\径名?/p> 多数情况下,如果q些Ҏ接收了无效的路径会抛出异常,但如果\径名是因为包含了通配W(*?Q从而无效,则不会抛出异常(可以使用GetInvalidPathCharsҎ来非法的路径字符Q。我们可以根据该原则判断一个\径是否合法?br /> 1?span style="COLOR: #2000ff">文gҎ览对话框QFolderBrowserDialogc) 主要属性: 主要ҎQ?br /> ShowDialogQ打开该对话框Q返回gؓDialogResultcd|如果为DialogResult.OKQ则可以由SelectedPath属性获取用户选定的\径; 2?span style="COLOR: #2000ff">打开文g对话?/span>QOpenFileDialogc) 3?span style="COLOR: #2000ff">保存文g对话?/span>QSaveFileDialogc) 主要属性:
二、相关的通用文g对话?/strong>
用户可以通过该对话框览、新建ƈ选择文g夹,如下图:
DescriptionQ树视图控g上显C的说明文本Q如上图中的”选择要进行计的目录”;
RootFolderQ获取或讄从其开始浏览的Ҏ件夹Q如上图中设|的我的电脑Q默认ؓ桌面Q;
SelectedPathQ获取或讄用户选定的\径,如果讄了该属性,打开对话框时会定位到指定路径Q默认ؓҎ件夹Q关闭对话框时根据该属性获取用L户选定的\径;
ShowNewFolderButtonQ获取或讄是否昄新徏对话框按钮;
dlgOpenFolder.RootFolder = Environment.SpecialFolder.MyComputer;
dlgOpenFolder.ShowNewFolderButton = true;
DialogResult result = dlgOpenFolder.ShowDialog(this);
if (result == DialogResult.OK)
{
txtDirPath.Text = dlgOpenFolder.SelectedPath;
}
用户可以通过该对话框选择一个文Ӟ见下图:
CheckFileExistsQ该值指C如果用h定不存在的文件名Q对话框是否昄警告Q?br /> FileName(s)Q获取或讄一个包含在文g对话框中选定的文件名的字W串Q?br /> FilterQ获取或讄对话框的文gcd列表Q?br /> FilterIndexQ对话框的文件类型列表的索引Q基?的)Q?br /> InitialDirectoryQ获取或讄文g对话框显C的初始目录Q?br /> MultiselectQ该值指C对话框是否允许选择多个文gQ?br /> ShowReadOnlyQ该值指C对话框是否包含只读复选框Q?br /> TitleQ获取或讄文g对话框标题;
主要ҎQ?br /> OpenFileQ打开用户选定的具?span style="COLOR: #2000ff">只读权限的文Ӟ
ShowDialogQ打开该模式对话框Q?
dlgOpenFile.InitialDirectory = @"C:\Inetpub\";
dlgOpenFile.Filter = "文本文g (*.txt)|*.txt|所有文件?*.*)|*.*";
dlgOpenFile.FilterIndex = 2;
dlgOpenFile.ShowReadOnly = true;
DialogResult dr = dlgOpenFile.ShowDialog();
if (dr == DialogResult.OK)
{
string fileName = dlgOpenFile.FileName;
}
用户可以通过该对话框保存一个文Ӟ见下图:
大部分与打开文g对话框类|此处略过Q下面几个值得注意Q?br /> CreatePromptQ该值指C如果用h定不存在的文Ӟ是否提示用户允许创徏该文Ӟ
OverwritePromptQ该值指C如果用h定的文g名已存在Q对话框是否昄警告Q?br /> 主要ҎQ?br /> OpenFileQ打开用户选定的具有读/写权限的文gQ?br /> ShowDialogQ打开该模式对话框Q?br /> CZ代码Q?br />
dlgSaveFile.InitialDirectory = @"C:\Inetpub\";
dlgSaveFile.Filter = "文本文g (*.txt)|*.txt|所有文件?*.*)|*.*";
dlgSaveFile.FilterIndex = 2;
DialogResult dr = dlgSaveFile.ShowDialog();
if (dr == DialogResult.OK)
{
string fileName = dlgSaveFile.FileName;
}
xQ我们操作的都只是\径,要知道,q些路径仅仅是字W串Q还没有涉及到文件系l中的真实文件。下一中会详l了解有x件和目录的相x作?img src ="http://m.tkk7.com/zgghc/aggbug/111839.html" width = "1" height = "1" />
]]>
速度试Q?/strong>
软g的性能和可性是一个复杂的主题。要保应用E序能够满用户的期望,需要在开发周期内考虑它的性能和可性。这在设计阶D至关重要,一个糟p的设计几乎肯定会导致糟p的用户体验。然而,仅仅有好的设计也不能保证E序能够高效地运行,最l代码的质量同样重要?br /> 量度一个运行时间较长的例程相当单。如果一个过E会持箋几分钟,只要一块腕表就可以记录它的旉了。比如一个执行时间ؓ两分钟的q程Q?0%的改善能够节?2U,q是很容易去定的?br /> 而如果要量一个非常短暂的q程Q就要考虑更好的精性了。比如有一些很的例程Q它们的q行旉可能只有千分之一U,但会被调?00万次Q这L累积效果明显了。在.NET framework的先前版本中Q需要用Windows API函数Q而在.NET framework 2.0中,微Y引入了StopwatchQ它是我们的秒表)cL化时间的量度d?br /> Stopwatchc?
使用StopwatchcL量度旉非常单。跟现实生活中的U表一Pq个cȝ对象也能够对计数器进行开始、停止、归Ӟ重置Q操作,不过它可比一般的U表_多了Q它能够_到微U(也就是百万分之一U)?br /> CZ代码Q?/strong>
要演CStopwatch的用还是来D代码吧。下面是一个控制台应用E序Q它??00万之间的所有整数篏加:
应当Ҏ计时d的情况选择其中的一个属性。在我们的示例程序中QElapsed属性提供了需要的_度,用它来输出经q的微秒数。这也是TimeSpan的最高精度了?br /> 下面是最l的E序代码Q?br />
另外Q用IsRunning属性可以查看一个Stopwatch实例是否正在计时Q用StartNewҎ可以开始一个新的计时器?br />
Example:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace StopWatchClass
{
class Program
{
static void Main(string[] args)
{
Stopwatch timer = new Stopwatch();
long total = 0;
timer.Start();
//for (int i = 0; i <= 1000000;i++){total = total + i;}
StringBuilder ss = new StringBuilder("你好");
for (int i = 0; i < 100; i++)
ss.Append("masjkfhkjsadhfkashdfjasdhfkjasdfuirusdg");
timer.Stop();
double micr = timer.Elapsed.TotalMilliseconds;
timer.Reset();
timer.Start();
string s = "你好";
for (int i = 0; i < 100; i++)
{
s = s + "masjkfhkjsadhfkashdfjasdhfkjasdfuirusdg";
}
timer.Stop();
//NET执行效率工具
string micro =Convert.ToString( timer.Elapsed.TotalMilliseconds );
Console.WriteLine(micr + " " + micro);
Console.Read();
}
}
}
q几天因为C#的DateTime困惑了一下,也顺便研I了一下DateTime对象Q原来表现这么丰富!
我在q里主要介绍datetimecd在tostring()format的格式设|,然后有兴的q可以看看datetimcd是如何对其本w做操作W重载的QMsdn上有介绍Q我׃累赘了。友情提C:datetime.now.tostring()Ҏ默认的你是无法得到全部的旉的格式的Q只能得到日期,得不到具体时_如果要具体时_应该用datetime的tostringQ)重蝲Qdatetime.now.tostring("F")q样p拿到完整的时间格式了。。。我也就是ؓq郁闷了好久。。?/p>
参数format格式详细用法
格式字符 兌属?说明
d ShortDatePattern
D LongDatePattern
f 完整日期和时_长日期和短时_
F FullDateTimePatternQ长日期和长旉Q?
g 常规Q短日期和短旉Q?
G 常规Q短日期和长旉Q?
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用当地旉?SortableDateTimePatternQ基?ISO 8601Q?
t ShortTimePattern
T LongTimePattern
u UniversalSortableDateTimePattern 用于昄通用旉的格?
U 使用通用旉的完整日期和旉Q长日期和长旉Q?
y、Y YearMonthPattern
下表列出了可被合q以构造自定义模式的模式。这些模式是区分大小写的Q例如,识别“MM”,但不识别“mm”。如果自定义模式包含I白字符或用单引hh的字W,则输出字W串也包含这些字W。未定义为格式模式的一部分或未定义为格式字W的字符按其原义复制?
格式模式 说明
d 月中的某一天。一位数的日期没有前导零?
dd 月中的某一天。一位数的日期有一个前导零?
ddd 周中某天的羃写名Uͼ?AbbreviatedDayNames 中定义?
dddd 周中某天的完整名Uͼ?DayNames 中定义?
M 月䆾数字。一位数的月份没有前导零?
MM 月䆾数字。一位数的月份有一个前导零?
MMM 月䆾的羃写名Uͼ?AbbreviatedMonthNames 中定义?
MMMM 月䆾的完整名Uͼ?MonthNames 中定义?
y 不包含纪元的q䆾。如果不包含U元的年份小?10Q则昄不具有前导零的年份?
yy 不包含纪元的q䆾。如果不包含U元的年份小?10Q则昄h前导零的q䆾?
yyyy 包括U元的四位数的年份?
gg 时期或纪元。如果要讄格式的日期不h兌的时期或U元字符Ԍ则忽略该模式?
h 12 时制的时。一位数的小时数没有前导零?
hh 12 时制的时。一位数的小时数有前导零?
H 24 时制的时。一位数的小时数没有前导零?
HH 24 时制的时。一位数的小时数有前导零?
m 分钟。一位数的分钟数没有前导零?
mm 分钟。一位数的分钟数有一个前导零?
s U。一位数的秒数没有前导零?
ss U。一位数的秒数有一个前导零?
f U的数_ֺZ位。其余数字被截断?
ff U的数_ֺZ位。其余数字被截断?
fff U的数_ֺZ位。其余数字被截断?
ffff U的数_ֺ为四位。其余数字被截断?
fffff U的数_ֺZ位。其余数字被截断?
ffffff U的数_ֺ为六位。其余数字被截断?
fffffff U的数_ֺZ位。其余数字被截断?
t ?AMDesignator ?PMDesignator 中定义的 AM/PM 指示的W一个字W(如果存在Q?
tt ?AMDesignator ?PMDesignator 中定义的 AM/PM 指示(如果存在Q?
z 时区偏移量(?”或?”后面仅跟小Ӟ。一位数的小时数没有前导零。例如,太^z标准时间是?8”?
zz 时区偏移量(?”或?”后面仅跟小Ӟ。一位数的小时数有前导零。例如,太^z标准时间是?08”?
zzz 完整时区偏移量(?”或?”后面跟有小时和分钟Q。一位数的小时数和分钟数有前导零。例如,太^z标准时间是?08:00”?
: ?TimeSeparator 中定义的默认旉分隔W?
/ ?DateSeparator 中定义的默认日期分隔W?
% c 其中 c 是格式模式(如果单独使用Q。如果格式模式与原义字符或其他格式模式合qӞ则可以省略?”字W?
\ c 其中 c 是Q意字W。照原义昄字符。若要显C反斜杠字符Q请使用“\\”?
只有上面W二个表中列出的格式模式才能用于创徏自定义模式;在第一个表中列出的标准格式字符不能用于创徏自定义模式。自定义模式的长度至ؓ两个字符Q例如,
DateTime.ToString( "d") q回 DateTime |“d”是标准短日期模式?
DateTime.ToString( "%d") q回月中的某天;?d”是自定义模式?
DateTime.ToString( "d ") q回后面跟有一个空白字W的月中的某天;“d”是自定义模式?
比较方便的是,上面的参数可以随意组?q且不会出错,多试?肯定会找C要的旉格式
如要得到2005q?6?q样格式的时?
可以q样?
date.ToString("yyyyqMM?, DateTimeFormatInfo.InvariantInfo)
1、DateTime 数字?
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分U?
currentTime=System.DateTime.Now;
1.2 取当前年
int q?currentTime.Year;
1.3 取当前月
int ?currentTime.Month;
1.4 取当前日
int ?currentTime.Day;
1.5 取当前时
int ?currentTime.Hour;
1.6 取当前分
int ?currentTime.Minute;
1.7 取当前秒
int U?currentTime.Second;
1.8 取当前毫U?
int 毫秒=currentTime.Millisecond;
Q变量可用中文)
2、Int32.Parse(变量) Int32.Parse("帔R")
字符型{?转ؓ32位数字型
3?变量.ToString()
字符型{?转ؓ字符?
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 K?2,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16q制)
12345.ToString("p"); //生成 1,234,500.00%
4、变?Length 数字?
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量Q?str是求的字串的变量名
5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转ؓ比特?
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比牚w度:
len = bytStr.Length;
6、System.Text.StringBuilder("")
字符串相加,Q?h不是也一PQ?
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和?);
7、变?Substring(参数1,参数2);
截取字串的一部分Q参?为左起始位数Q参?为截取几位?
如:string s1 = str.Substring(0,2);
8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远E用户IP地址
9、穿q代理服务器取远E用L实IP地址Q?
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
10?Session["变量"];
存取Session|
如,赋| Session["username"]="布什";
取| Object objName=Session["username"];
String strName=objName.ToString();
清空Q?Session.RemoveAll();
11、String str=Request.QueryString["变量"];
用超链接传送变量?
如在M中链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx中取|String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新徏节点?);
创徏XML文新节?
13、父节点.AppendChild(子节?Q?
新建的子节点加到XML文父节点下
14?父节?RemoveChild(节点);
删除节点
15、Response
Response.Write("字串")Q?
Response.Write(变量)Q?
向页面输出?
Response.Redirect("URL地址"Q;
跌{到URL指定的页?
16、char.IsWhiteSpce(字串变量Q位?——逻辑?
查指定位|是否空字符Q?
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //l果为:True, W一个字W是0位,2是第三个字符?
17、char.IsPunctuation('字符') --逻辑?
查字W是否是标点W号
如:Response.Write(char.IsPunctuation('A')); //q回QFalse
18?int)'字符'
把字W{为数字,查代码点Q注意是单引受?
如:
Response.Write((int)'?); //l果Z字的代码Q?0013
19?char)代码
把数字{为字W,查代码代表的字符?
如:
Response.Write((char)22269); //q回“国”字?
20?Trim()
清除字串前后I格
21 、字串变?Replace("子字?,"替换?)
字串替换
如:
string str="中国";
str=str.Replace("?,"?); //国字换为央?
Response.Write(str); //输出l果为“中央?
再如Q(q个非常实用Q?
string str="q是<script>脚本";
str=str.Replace("<","<font><</font>"); //左括h换ؓ<font> ?< ?</font> Q或换ؓ<Q但估计lXML存诸后,再提Z会还原)
Response.Write(str); //昄为:“这?lt;script>脚本?
如果不替换,<script>不昄Q如果是一D脚本,运行;而替换后Q脚本将不运行?
q段代码的h值在于:你可以让一个文本中的所有HTML标签失效Q全部显C出来,保护你的h交互性的站点?
具体实现Q将你的表单提交按钮脚本加上下面代码Q?
string strSubmit=label1.Text; //label1是你让用h交数据的控gID?
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit?
用此Ҏq可以简单实现UBB代码?
22、Math.Max(i,j)
取i与j中的最大?
?int x=Math.Max(5,10); // x取?10
加一点吧 23、字串对?.....
加一点吧
23、字串对比一般都? if(str1==str2){ } , 但还有别的方?
(1)?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }
(2)?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
(3)?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
24、IndexOf() 、LastIndexOf()
查找字串中指定字W或字串首次Q最后一ơ)出现的位|?q回索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q?
25、Insert()
在字串中指定索引位插入指定字W。如Q?
str1.Insert(1,"?);在str1的第二个字符处插入“字”,如果str1="中国"Q插入后为“中字国”;
26、PadLeft()、PadRight()
在字串左Q或叻I加空格或指定char字符Q字串辑ֈ指定长度Q如Q?
<%
string str1="中国?;
str1=str1.PadLeft(10,'1'); //无第二参Cؓ加空?
Response.Write(str1); //l果为?111111中国人?Q?字串长ؓ10
%>
27、Remove()
从指定位|开始删除指定数的字W?
字串Ҏ一般都? if(str1==str2){ } , 但还有别的方?
1?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }
2?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
3?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
IndexOf()
查找字串中指定字W或字串首次出现的位|?q首索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q?
1.9 取中文日期显C——年月日时分
string strY=currentTime.ToString("f"); //不显C秒
1.10 取中文日期显C_q月
string strYM=currentTime.ToString("y");
1.11 取中文日期显C_月日
string strMD=currentTime.ToString("m");
1.12 取当前年月日Q格式ؓQ?003-9-23
string strYMD=currentTime.ToString("d");
1.13 取当前时分,格式为:14Q?4
string strT=currentTime.ToString("t");
更新一下, 上面不能~辑Q?
c#.net函数和方法集(大家一h加啊)
1、DateTime 数字?
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分U?
currentTime=System.DateTime.Now;
1.2 取当前年
int q?currentTime.Year;
1.3 取当前月
int ?currentTime.Month;
1.4 取当前日
int ?currentTime.Day;
1.5 取当前时
int ?currentTime.Hour;
1.6 取当前分
int ?currentTime.Minute;
1.7 取当前秒
int U?currentTime.Second;
1.8 取当前毫U?
int 毫秒=currentTime.Millisecond;
Q变量可用中文)
1.9 取中文日期显C——年月日时分
string strY=currentTime.ToString("f"); //不显C秒
1.10 取中文日期显C_q月
string strYM=currentTime.ToString("y");
1.11 取中文日期显C_月日
string strMD=currentTime.ToString("m");
1.12 取中文年月日
string strYMD=currentTime.ToString("D");
'www.knowsky.com
1.13 取当前时分,格式为:14Q?4
string strT=currentTime.ToString("t");
1.14 取当前时_格式为:2003-09-23T14:46:48
string strT=currentTime.ToString("s");
1.15 取当前时_格式为:2003-09-23 14:48:30Z
string strT=currentTime.ToString("u");
1.16 取当前时_格式为:2003-09-23 14:48
string strT=currentTime.ToString("g");
1.17 取当前时_格式为:Tue, 23 Sep 2003 14:52:40 GMT
string strT=currentTime.ToString("r");
1.18获得当前旉 n 天后的日期时?
DateTime newDay = DateTime.Now.AddDays(100);
2、Int32.Parse(变量) Int32.Parse("帔R")
字符型{?转ؓ32位数字型
3?变量.ToString()
字符型{?转ؓ字符?
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 K?2,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16q制)
12345.ToString("p"); //生成 1,234,500.00%
4、变?Length 数字?
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量Q?str是求的字串的变量名
5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转ؓ比特?
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比牚w度:
len = bytStr.Length;
6、System.Text.StringBuilder("")
字符串相加,Q?h不是也一PQ?
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和?);
7、变?Substring(参数1,参数2);
截取字串的一部分Q参?为左起始位数Q参?为截取几位?
如:string s1 = str.Substring(0,2);
8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远E用户IP地址
9、穿q代理服务器取远E用L实IP地址Q?
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
10?Session["变量"];
存取Session|
如,赋| Session["username"]="布什";
取| Object objName=Session["username"];
String strName=objName.ToString();
清空Q?Session.RemoveAll();
11、String str=Request.QueryString["变量"];
用超链接传送变量?
如在M中链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx中取|String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新徏节点?);
创徏XML文档新节?
13、父节点.AppendChild(子节?Q?
新建的子节点加到XML文档父节点下
14?父节?RemoveChild(节点);
删除节点
15、Response
Response.Write("字串")Q?
Response.Write(变量)Q?
向页面输出?
Response.Redirect("URL地址"Q;
跌{到URL指定的页?
16、char.IsWhiteSpce(字串变量Q位?——逻辑?
查指定位|是否空字符Q?
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //l果为:True, W一个字W是0位,2是第三个字符?
17、char.IsPunctuation('字符') --逻辑?
查字W是否是标点W号
如:Response.Write(char.IsPunctuation('A')); //q回QFalse
18?int)'字符'
把字W{为数字,查代码点Q注意是单引受?
如:
Response.Write((int)'?); //l果Z字的代码Q?0013
19?char)代码
把数字{为字W,查代码代表的字符?
如:
Response.Write((char)22269); //q回“国”字?
20?Trim()
清除字串前后I格
21 、字串变?Replace("子字?,"替换?)
字串替换
如:
string str="中国";
str=str.Replace("?,"?); //国字换为央?
Response.Write(str); //输出l果为“中央?
再如Q(q个非常实用Q?
string str="q是<script>脚本";
str=str.Replace("<","<font><</font>"); //左括h换ؓ<font> ?< ?</font> Q或换ؓ<Q但估计lXML存诸后,再提Z会还原)
Response.Write(str); //昄为:“这?lt;script>脚本?
如果不替换,<script>不昄Q如果是一D脚本,运行;而替换后Q脚本将不运行?
q段代码的h值在于:你可以让一个文本中的所有HTML标签失效Q全部显C出来,保护你的h交互性的站点?
具体实现Q将你的表单提交按钮脚本加上下面代码Q?
string strSubmit=label1.Text; //label1是你让用h交数据的控gID?
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit?
用此Ҏq可以简单实现UBB代码?
22、Math.Max(i,j)
取i与j中的最大?
?int x=Math.Max(5,10); // x取?10
23、字串对比一般都? if(str1==str2){ } , 但还有别的方?
(1)?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }
(2)?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
(3)?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.
24、IndexOf() 、LastIndexOf()
查找字串中指定字W或字串首次Q最后一ơ)出现的位|?q回索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q?
25、Insert()
在字串中指定索引位插入指定字W。如Q?
str1.Insert(1,"?);在str1的第二个字符处插入“字”,如果str1="中国"Q插入后为“中字国”;
26、PadLeft()、PadRight()
在字串左Q或叻I加空格或指定char字符Q字串辑ֈ指定长度Q如Q?
<%
string str1="中国?;
str1=str1.PadLeft(10,'1'); //无第二参Cؓ加空?
Response.Write(str1); //l果为?111111中国人?Q?字串长ؓ10
%>
27、Remove()
从指定位|开始删除指定数的字W?
<%
string str1="我是萨达姆的崇拜者之一";
Response.Write(str1.Remove(5,4)); //l果为“我是萨辑֧之一?
%>
<script language="c#" runat="server">
void Page_Load()
{
Response.Write("Hello World!");
}
</script>
<script language="vb" runat="server">
sub page_load()
response.write("Hello World!")
end sub
</script>
然后用本地访问,查看l果Q?/font>
在这里我要说明两点:1、我的示例文件L有A和B分别是用C#和VB写的Q演C的囄qC#那一U的Q都一样嘛Q教E里面代码也是写两种?lt;hr>分割开Q大家可以比较一下?、我写教E的时候用的都是记事本来编写APS.NET大家也可以安装VS.NET来编写不qv步还是用C本比较好Q因为可以看的更加透彻一炏V?br />今天p到这里,明天说一下C#的基本语法?br />十天学会ASP.net之第二天
学习目的Q掌握C#的基本知?br />一、定义变量:
string strExample; 字符?"aaa")
char chrExample; 字符('a')
bool blnExample; Bool?true/false)
DataTime datExample; 日期?"09/19/2002")
int intExample; 整数(32位有W号整数)
double dblExample; 点?64位双_ֺ点?
二、各U运:
= 赋D?
+ 加法q算
- 减法q算
* 乘法q算
/ 除法q算
% 取模q算
&& 逻辑And
|| 逻辑Or
! 逻辑Not
三、各U结构:
if(条g)
{
}
else
{
}
switch(条g)
{
case option1:
break;
case option2:
break;
}
for(int i=1;i<=10;i++)//特别注意q里面是分号
{
}
while(条g)
{
}
do
{
}while(条g);
四、注意事:
1、用习惯VB的h很容易漏了语句末分号Q?br />2、用习惯VB的h很随便用变量但是不xQ这在C#默认情况下是不允许的Q?br />3、在向函C递参数的时候要用圆括号QResponse.Write "aa";是不允许的?br />我说的这点几乎称不上是在说一U语aQ一U语a的学习不仅仅需要学习语法,q需要学习语a特色Q希望大家有I是买一本C#的书来好好研I一下C#作ؓ一U新的语a的特性吧。今天就说到q里Q明天说一下WEB控g?br />十天学会ASP.net之第三天
学习目的Q掌握WEB控g的?一)
或许你会问,Z么需要WEB控gQWEB控间好像VB里面的控_可以在程序的M地方引用Q修Ҏ有属性,有了它的配合才能完成代码分离。想一下,如果q是以前的HTML控间Q我们当我们需要在某一个地ҎCZD|据库的内Ҏ不是只有?lt;%= %>q样势必在HTML包含了程序的代码块,p不到分离代码和界面的目的了?br /> 或许你还会问Qؓ什么要代码分离那?原因很简单,不是每一个程序员都是合格的网设计师Q如果我们需要修改代码的时候会破坏|页设计师原来的讑֮Q是不是不方侉KQ程序代码和HTML代码混合在一起对于程序员来说也不方便修改代码。当Ӟ我们的网设计师也需要学习一点WEB控间的知识?
下面来一个一个介l:
一、Label控gQ?br />主要属性:
Text 标签所昄的文?br />范例Q?lt;asp:Label id="lblMessage" Text="aaa" runat="server"/>
需要注意的是我们不能遗漏runat="server"字样Q还有所有的WEB控g都要包含?lt;form runat="server"></form>中间
下面看一个完整的例子Q在E序里面修改Label的Text属性,以此改变|页的显C?br /><script runat="server" language="c#">
void Page_Load()
{
lblMessage.Text="Hello World!";
}
</script>
<html>
<head><title>Label.aspx</title></head>
<body>
<form runat="server">
<asp:Label id="lblMessage" runat="server"/>
</form>
</body>
</html>
--------------------------------------------------------------------------------
<script runat="server" language="vb">
sub Page_Load
lblMessage.Text="Hello World!"
end sub
</script>
<html>
<head><title>Label.aspx</title></head>
<body>
<form runat="server">
<asp:Label id="lblMessage" runat="server"/>
</form>
</body>
</html>
二、TextBox控gQ?br />主要属性:
Text 控g昄的文本;
MaxLength 文本框可以添加的最多的字符敎ͼ多行文本框无效)Q?br />ReadOnly 只读Q?br />TextMode 有下面几个有效?MultiLine,Password,SingleLineQ?br />Rows 指定文本框的垂直寸
三、Button控gQ?br />有三U:Button 标准的表单按钮;ImageButton 昄囑փ的表单按钮;LinkButton 昄作ؓ链接样子Button
Button基本上就是Text属性来讄按钮上面的文字;
ImageButton基本上就是ImageUrl来设|按钮上图象的地址QAlternativeText 在浏览器不支持图片的时候显C的文字Q?br />LinkButton基本上就是Text属性来讄按钮上的文字Q?br />他们三者共同的属性就是CausesValidation=true/false来设|按钮提交的表单是不是被验(后面说到检验控Ӟ
他们三者共同的Ҏ是OnClick是点击按钮的时候触发的函数Q下面D一个例子:
<script runat="server" language="c#">
void btnCounter_OnClick(object sender,EventArgs e)
{
btnCounter.Text="Clicked";
}
</script>
<html>
<head><title>Label.aspx</title></head>
<body>
<form runat="server">
<asp:Button Text="UnClicked" OnClick="btnCounter_OnClick" id="btnCounter" runat="server"/>
</form>
</body>
</html>
--------------------------------------------------------------------------------
<script runat="server" language="vb">
sub btn_COunter_OnClick(s as object,e as eventargs)
btnCounter.Text="Clicked"
end sub
</script>
<html>
<head><title>Label.aspx</title></head>
<body>
<form runat="server">
<asp:Button Text="UnClicked" OnClick="btnCounter_OnClick" id="btnCounter" runat="server"/>
</form>
</body>
</html>
今天pq三个控Ӟ明天l箋?br />十天学会ASP.net之第四天
学习目的Q掌握WEB控g的??
首先我要说明Q我q十天教E也只是一个让大家对ASP.NET有一个认识而已Q我也蟩q了很多东西。网上有很多人在责骂我写的教E,认ؓ十天什么都学不会,看了我的教程q是什么都不会Q我想他们或许是q高估计了我的教E。外面有很多书,关于ASP和ASP.NET的,我就是看外面的书学会的。我所要做的就是希望大家能看了我的教程以后觉得ASP和ASP.NET不是学不会的东西然后有信心去学会它。我惛_习还是靠自己的,外面每一本书也有自己写的不周到的地方Q关键还需要自q实践加上探烦?br />首先来说一下表单的验证控gQ以前我们做表单验证Q如果是客户端的javascriptQ不能做到美观统一Q而且q可以通过直接在浏览器h表单来屏蔽;如果我们做服务器端验证,又会发现让检验结果在前台反映也是很麻烦的事情。现在好了,ASP.NET提供的很多检验控件让我们不需要考虑是客L验还是服务器端检验,让我们不需要考虑是怎么输出验结果?br />看一下检验表单控件是不是填写了的验控件先Q?br /><asp:textbox id="username" runat="server" CSSclass="textbox"/>
<asp:requiredfieldvalidator controltovalidate="username" display="dynamic" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="请填? runat="server"/>
controltovalidate是你想验的控g的IDQ默认情况下不显C错误消息,地方也会被保留,如果使用了display="dynamic" 那么不显C错误消息的地方不会被空出; forecolor="#ff0000" font-name="宋体" font-size="9pt" 是讑֮错误消息字体的颜Ԍ字体Q大的Qtext="请填? 是当没有填写内Ҏ候显C的错误消息Q别忘记最后的runat="server"。现在这个检验控件是攑֜了textbox的后面,那么错误消息也在textbox后面昄Q也可以攑֜其他地方?br />再看一下比较表单控件的数据与另外一个数据的验控Ӟ
<asp:textbox id="password1" runat="server" textmode="password" cssclass="textbox"/>
<asp:requiredfieldvalidator controltovalidate="password1" display="dynamic" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="请填? runat="server"/>
q里是第一个需要用户填写的密码?br />我们l常会再讄一个密码框让用户再填写一ơ:
<asp:textbox id="password2" runat="server" textmode="password" cssclass="textbox"/>
<asp:requiredfieldvalidator controltovalidate="password2" display="dynamic" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="请填? runat="server"/>
<asp:comparevalidator controltovalidate="password2" controltocompare="password1" display="dynamic" operator="equal" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="认p|" runat="server"/>
controltocompare="password1" 是需要比较的控gQoperator="equal" 是讑֮比较操作是:是否相等Q还有NotEqualQ不相等,LessThanQ少?GreaterThanQ大于,当不W合q个比较操作的时候显C错误消息)?br />以前说到BUTTON控gCausesValidation=true/false来设|按钮提交的表单是不是被验也是q里的几个检验控Ӟ如果CausesValidation=true的话按下按钮׃首先是不是都通过了检验控件的验?br />下面再说两点Q?br />一、每一个可以显C的控g都有是不是显C的属性,比如username.Visible=false;是隐藏了前面的username控gQ还有就是如果要Ҏ件应用CSS的话p么写Qcssclass=""Q而不是以前HTML中的class=""?br />二、所有WEB控g都要包含?lt;form runat="server"></form>中,否则׃出错?br />今天到此结束,Ll往后面看,下次开始就要说ADO.NET了?br />十天学会ASP.net之第五天
学习目的Q学会连接两U数据库
对于ASP来说Q我们常用的数据库无非是ACCESS和SQL SERVERQ对于ASP.NET也是Q不qASP.NET对于SQL SERVER有专门的q接lg而不推荐用OLE DB?br />首先看一下ACCESS的连接数据库q打开Q?br />string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
strConnection+=Server.MapPath("*.mdb"); //*是数据库的名字
OleDbConnection objConnection=new OleDbConnection(strConnection);
objConnection.Open();
--------------------------------------------------------------------------------
dim objConnection as OleDbConnection
objConnection=new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("*.mdb"))
objConnection.Open()
下面再看一下SQL SERVER的连接数据库q打开Q?br />string strConnection="server=数据库连?uid=用户?pwd=密码;database=数据库名?;
SqlConnediob objConnection=new SqlCOnnection(strConnection);
objConnection.Open();
--------------------------------------------------------------------------------
dim objConnection as SqlConnectiom
objConnection=new SqlConnection("server=数据库连?uid=用户?pwd=密码;database=数据库名?)
objConnection.Open()
实际上,在大多数地方SQL SERVER和ACCESS的区别除了连接语句,其他定义语句也就是SQL××和OLEDB××的区?br />另外Q如果是ACCESS数据库的话在ASPX文g的开头需要包括下列语句:
<
%@Import
Namespace="System.Data"%>
<
%@Import
Namespace="System.Data.OleDb"%>
如果是SQL SERVER则需要包括以下语句:
<
%@Import
Namespace="System.Data"%>
<
%@Import
Namespace="System.Data.SqlClient"%>
今天p到这里,明天开始讲数据库的d?br />十天学会ASP.net之第六天
学习目的Q学会读取数据库
有的|友_不会C#Q在ASP.NET里面q是选择VB.NETQ这个我不反对,但是我觉得既然是学习新的东西Q就不要在意有多是新的。实际上C#׃般的操作来说Q只是区分大写和多了一个分可两点与VB.NET不同其他都差不多啊。在ASP里面我们d数据q接用RECORDSETQ然后在HTML代码里面I插<%= %>可以显CZQ但是ASP.NET讲究的是代码分离Q如果还是这hC数据就不能代码分离了。所以我们有两种ҎQ如果是d一条记录的数据或者不多的数据Q我们用DATAREADER采集数据Q然后赋值给LABEL控g的Text属性即可;如果是读取大量数据我们就采用DATAGRID?br />今天我们来说一下DATAREADERQ?br />string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
strConnection+=Server.MapPath(strDb);
OleDbConnection objConnection=new OleDbConnection(strConnection);
OleDbCommand objCommand = new OleDbCommand("q里是SQL语句" , objConnection);
objConnection.Open();
OleDbDataReader objDataReader=objCommand.ExecuteReader();
if(objDataReader.Read())
{
oicq.Text=Convert.ToString(objDataReader["useroicq"]);
homesite.Text=Convert.ToString(objDataReader["usersite"]);
face.SelectedItem.Text=Convert.ToString(objDataReader["userface"]);
}
大家可以看到我们首先是连接数据库然后打开Q对于select的命令,我们x一个OleDbCommand来执行之Q然后再x一个OleDbDataReaderQ来d数据Q用的是ExecuteReader()QobjDataReader.Read()开始读取了Q在输出的时候我们要注意Text属性接受的只能是字W串Q所以我们要把读出的数据都{化ؓ字符串才行?br />转换变量cd函数Q?br />转换为字W串QConvert.ToString()
转换为数字:Convert.ToInt64()QConvert.ToInt32()QConvert.ToInt16() 是按照数字位数由长到?br />转换为日期:Convert.ToDateTime()
--------------------------------------------------------------------------------
dim objConnection as OleDbConnection
dim objCommand as OleDbCommand
dim objDataReader as OleDbDataReader
objConnection=new OleDbConnection(Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath(strDb))
objCommand=new OleDbCommand("q里是SQL语句" , objConnection)
objConnection.Open()
objDataReader=objCommand.ExecuteReader()
if objDataReader.Read()
oicq.Text=Convert.ToString(objDataReader["useroicq"])
homesite.Text=Convert.ToString(objDataReader["usersite"])
face.SelectedItem.Text=Convert.ToString(objDataReader["userface"])
end if
其实大家比较一下C#和VB的语法,会发觉用C#g更加单,教程里面我侧重C#Q对于VB的代码我׃解释了?br />下面说一下如果代码是dSQL数据库,我们q样来{?br />1、把代码开始的
<
%@Import
Namespace="System.Data"%>
<
%@Import
Namespace="System.Data.OleDb"%>
修改?br /><
%@Import
Namespace="System.Data"%>
<
%@Import
Namespace="System.Data.SqlClient"%>
2、把代码里面所有申明的对象OleDb××变ؓSql××p么简?br />你甚臛_以用替换所有来解决Q所以今后我讲不再列出Sql Server的代码了?br />今天p到这里,明天开始说数据的添加、删除、修攏V?br />十天学会ASP.net之第七天
学习目的Q学会添加删除修改记?br />以前我们在ASP中不是dq是删除记录或者用SQL语句加上EXECUTE()或者就是直接用RECORDSET的NEW、DELETE、UPDATE{方法来d删除修改记录。在ASP.NET里面我们采用SQL语句加上COMMAND对象来执行SQL语句的方法来d删除修改记录。这比上ơ说的读取记录还单。实际上只有一点区别,把ExecuteReader()修改为ExecuteNonQuery()卛_Q因为我们不需要返回值啊?br />string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
strConnection+=Server.MapPath(strDb);
OleDbConnection objConnection=new OleDbConnection(strConnection);
OleDbCommand objCommand = new OleDbCommand("q里是SQL语句" , objConnection);
objConnection.Open();
OleDbDataReader objDataReader=objCommand.ExecuteNonQuery();
--------------------------------------------------------------------------------
dim objConnection as OleDbConnection
dim objCommand as OleDbCommand
objConnection=new OleDbConnection(Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath(strDb))
objCommand=new OleDbCommand("q里是SQL语句" , objConnection)
objConnection.Open()
objDataReader=objCommand.ExecuteNoQuery()
下面再D例子说明一下SQL语句QACCESSQ:
d记录Q?insert int
o 表名 (字段1Q字D?) values (字符?Q字W串2) where 条g
删除记录Q?delete from 表名 where 条g
修改记录Q?update 表名 set 字段1=××Q字D?=×× where 条g
需要特别注意,如果是Sql Server删除记录是delete 表名Q不需要再加from了?
今天p到这里了Q明天说ASP.NET里面最著名的DATAGRID?br />十天学会ASP.net之第八天
学习目的Q初步掌握DATAGRID的?br />以前在ASP中,我们昄大批量数据经怋用@环读取记录集的方式,在表g插入代码来显C,循环的是<tr>Q如果是分页q需要自己制作,如果排序更加复杂Q在ASP.NET中就好了Q一切工作都可以让DATAGRID来做?br />首先看一下DATAGRID的样式方面的属?br />BackImageUrl="" 背景囄
CellSpacing="" 单元格间?br />CellPadding="" 单元格填?br />CSSClass="" 使用的CSS样式
DATAGRID可以自动用表中的字段名放在显C的记录的头部来表示各个单元格所代表的意义,用ShowHeader="true/false"来控制是不是昄Q在大多数情况下我们是不需要这个功能的Q因为我们数据库中的字段名大多是英文的,而我们想在页面输出的大多是中文名字?br />下面看一下显C数据库内所有记录,几行代码:
<script runat="server" language="c#">
void Page_Load()
{
string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
strConnection+=Server.MapPath("guestbook.mdb");
OleDbConnection objConnection=new OleDbConnection(strConnection);
OleDbCommand objCommand1 = new OleDbCommand("select * from guestbook",objConnection);
objConnection.Open();
dgrdMain.DataSource=objCommand1.ExecuteReader();//dgrdMain是下面的DATAGRID的ID
dgrdMain.DataBind();
objConnection.Close();
}
</script>
<html>
<body>
<asp:DataGrid
id="dgrdMain"
cellpadding="1"
showheader="true"
borderwidth="0"
runat="server"
/>
</body>
</html>
至于VB的版本,q次大家自己来试试吧Q)
假设数据库是三个字段Qid,aa,bb
昄的样子就如下Q?/font>
id aa bb
1 werwe rewrwe
2 werwe rewrwe
我们一定觉得这U显CZ满意Q我们有两种昄的方式(需要包括在<columns></columns>中间Q:
一、默认的列,我们可以选择不输出所有的字段q可以安排顺序:
<asp:BoundColumn DataField="惌昄的字D名">
比如说我们想按照bb,aa来输个表Q我们这么写
<asp:DataGrid
id="dgrdMain"
cellpadding="1"
showheader="true"
autogeneratecolumns="false"
borderwidth="0"
runat="server">
<columns>
<asp:boundcolumn datafield="bb"/>
<asp:boundcolumn datafield="bb"/>
</columns>
</asp:datagrid>
注意使用了autogeneratecolumns="false"以后DATAGRID׃会自动输出所有字D了?br />二、以模板列,我们可以定制每一个单元格的样式:
<asp:TemplateColumn>
<itemTemplate>
中间是一个表|x么样就怎么?br /></itemTemplate>
</asp:DataGrid>
或许你们要说怎么在表g输出代码那,可以使用<%# DataBinder.Eval(Container.DataItem,"字段?).ToString()%>
下面看一个例子,我们所要做的就是把aa,bb两个字段攑֜一个单元格内显C,好像下面一P
1 werwe
rewrwe
2 werwe
rewrwe
我们q样写代码:
<asp:DataGrid
id="dgrdMain"
cellpadding="1"
showheader="false"
autogeneratecolumns="false"
borderwidth="0"
runat="server">
<columns>
<asp:boundcolumn datafield="ii"/> 首先使用默认的显C方式显CID
<asp:TemplateColumn> 再用模板来昄后面一列(由AA,BBq列l成Q?br /><itemTemplate>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td><%# Container.DataItem("aa")%></td>
</tr>
<tr>
<td><%# Container.DataItem("bb")%></td>
</tr>
</table>
</itemTemplate>
</asp:DataGrid>
</columns>
</asp:datagrid>
今天p到这里,明天我们来看一下DATAGRID的分|C等功能
十天学会ASP.net之第九天
学习目的Q学会用DATAGRID分页昄
虽然说DATAGRID的分|C效率不怎么高,但是不管怎么_它是最方便的分|C,对于做一个留a还是相当简单实用的。对于启用分功能还有一个重要要求,只能在DATADRID控g的数据源实现了ICOLLECTION接口的情况下才能启用分页功能Q而DATAREADER没有q个接口Q所以必M用DATATABLE来代ѝ?br /><script runat="server" language="c#">
void Page_Load()
{
string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
strConnection+=Server.MapPath("guestbook.mdb");
OleDbConnection objConnection=new OleDbConnection(strConnection);
OleDbDataAdapter objDataAdapter=new OleDbDataAdapter("select * from guestbook",objConnection);
DataSet objDataSet=new DataSet();
objDataAdapter.Fill(objDataSet);
dgrdMain.DataSource=objDataSet;
dgrdMain.DataBind();
}
void dgrdMain_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
{
dgrdMain.CurrentPageIndex = e.NewPageIndex;
DataBind();
}
</script>
<html>
<body>
<asp:DataGrid
id="dgrdMain"
cellpadding="1"
showheader="true"
borderwidth="0"
allowpaging="true" 启用分页功能
pagesize="3" 每一|CZ条记?br />onpageindexchanged="dgrdMain_pageindexchanged " 调用W×页的函CؓdgrdMain_PageIndexChanged()
runat="server"
/>
</body>
</html>
--------------------------------------------------------------------------------
<script runat="server" language="vb">
subPage_Load
dim objConnection as OleDbConnection
dim objDataAdapter as OleDbDataAdapter
dim objDataSet as DataSet
objConnection=new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("guestbook.mdb"))
objDataAdapter=new OleDbDataAdapter("select * from guestbook",objConnection)
objDataSet=new DataSet
objDataAdapter.Fill(objDataSet)
dgrdMain.DataSource=objDataSet
dgrdMain.DataBind()
end sub
sub dgrdMain_PageIndexChanged(sender as object,e as datagridpagechangedeventargs)
dgrdMain.CurrentPageIndex = e.NewPageIndex
DataBind
end sub
</script>
<html>
<body>
<asp:DataGrid
id="dgrdMain"
cellpadding="1"
showheader="true"
borderwidth="0"
allowpaging="true" 启用分页功能
pagesize="3" 每一|CZ条记?br />onpageindexchanged="dgrdMain_pageindexchanged " 调用W×页的函CؓdgrdMain_PageIndexChanged()
runat="server"
/>
</body>
</html>
q样是最单的分页Q我们可以用参数pagestyle-mode="nextprev/numericpages"来设定是昄上一c下一|式还是直接选择面的数字方式来实现面跌{。如果是前者我们可以用pagestyle-nextpagetext来设定包含下一链接的文本Q用pagestyle-prevpagetext来设定包含上一链接的文本Q如果是后者我们可以用PagerStyle-PageButtonCount来设定在使用省略号之前显C的面~号数量Q默认是10Q?br />今天p到这里,明天说一下SESSION和COOKIE?br />十天学会ASP.net之第十天
学习目的Q学会SESSION和COOKIE的?br />在各个网间的变量传递和一些记录用L登陆信息要用到SESSION和COOKIE。在ASP.NET中用COOKIE比ASP中稍微麻烦一点,因ؓ我们要申明变量?br />首先看一下SESSION的用,基本和ASP差不?br />写入一个SESSIONQ?br />Session["username"])="aa";
--------------------------------------------------------------------------------
Session("username")="aa"
d一个SESSINNQ?
string username= Session["username"];
--------------------------------------------------------------------------------
dim username=Session("username")
再来看一下COOKIE的写入:
DateTime dt=DateTime.Now; //需?lt;
%@Import
Namespace="System"%>Q得到当前时?br />HttpCookie mycookie=new HttpCookie("logname");//x新的COOKIE变量
mycookie.Value="aa";//赋?br />mycookie.Expires=Convert.ToDateTime(dt+TimeSpan.FromDays(1));//讑֮q期旉??br />Response.Cookies.Add(mycookie1);//写入COOKIE
--------------------------------------------------------------------------------
dim dt as DateTime
dt=DataTime.Now
dim mycookie as HttpCookie
mycookie=new HttpCookie("logname")
mycookie.Value="aa"
mycookie.Expires=Convert.ToDateTime(dt+TimeSpan.FromDays(1))
Response.Cookies.Add(mycookie1)
看一下COOKIE的读取:
HttpCookie mycookie=Request.Cookies["username"];
string username=mycookie.Value;
--------------------------------------------------------------------------------
dim mycookie as HttpCookie
mycookie=Request.Cookies["username"]
dim string=mycookie.Value
到此《十天学会ASP.NET》结束了Q时间仓促,q请大家原谅写的不全Q实际上我只是带大家入门Q学会还要靠自己啊?/font>