首页 > 代码库 > 【转】c#文件操作大全(一)

【转】c#文件操作大全(一)

1.创建文件夹
//using System.IO;
Directory.CreateDirectory(%%1);

2.创建文件
//using System.IO;
File.Create(%%1);

3.删除文件
//using System.IO;
File.Delete(%%1);

4.删除文件夹
//using System.IO;
Directory.Delete(%%1);

5.删除一个目录下所有的文件夹
//using System.IO;
foreach (string dirStr in Directory.GetDirectories(%%1))
{
 DirectoryInfo dir = new DirectoryInfo(dirStr);
 ArrayList folders=new ArrayList();
 FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
 for (int i = 0; i < folders.Count; i++)
 {
  FileInfo f = folders[i] as FileInfo;
  if (f == null)
  {
   DirectoryInfo d = folders[i] as DirectoryInfo;
   d.Delete();
  }
 }
}

6.清空文件夹
//using System.IO;
Directory.Delete(%%1,true);
Directory.CreateDirectory(%%1);

7.读取文件
//using System.IO;
StreamReader s = File.OpenText(%%1);
string %%2 = null;
while ((%%2 = s.ReadLine()) != null){
 %%3
}
s.Close();

8.写入文件
//using System.IO;
FileInfo f = new FileInfo(%%1);
StreamWriter w = f.CreateText();
w.WriteLine(%%2);
w.Close();

9.写入随机文件
//using System.IO;
byte[] dataArray = new byte[100000];//new Random().NextBytes(dataArray);
using(FileStream FileStream = new FileStream(%%1, FileMode.Create)){
// Write the data to the file, byte by byte.
 for(int i = 0; i < dataArray.Length; i++){
  FileStream.WriteByte(dataArray[i]);
 }
// Set the stream position to the beginning of the file.
 FileStream.Seek(0, SeekOrigin.Begin);
// Read and verify the data.
 for(int i = 0; i < FileStream.Length; i++){
  if(dataArray[i] != FileStream.ReadByte()){
   //写入数据错误
   return;
  }
 }
//"数据流"+FileStream.Name+"已验证"
}

10.读取文件属性
//using System.IO;
FileInfo f = new FileInfo(%%1);//f.CreationTime,f.FullName
if((f.Attributes & FileAttributes.ReadOnly) != 0){
 %%2
}
else{
 %%3
}

11.写入属性
//using System.IO;
FileInfo f = new FileInfo(%%1);
//设置只读
f.Attributes = myFile.Attributes | FileAttributes.ReadOnly;
//设置可写
f.Attributes = myFile.Attributes & ~FileAttributes.ReadOnly;

12.枚举一个文件夹中的所有文件夹
//using System.IO;
foreach (string %%2 in Directory.GetDirectories(%%1)){
 %%3
}


13.复制文件夹

string path = (%%2.LastIndexOf("\") == %%2.Length - 1) ? %%2 : %%2+"\";
string parent = Path.GetDirectoryName(%%1);
Directory.CreateDirectory(path + Path.GetFileName(%%1));
DirectoryInfo dir = new DirectoryInfo((%%1.LastIndexOf("\") == %%1.Length - 1) ? %%1 : %%1 + "\");
FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dir.GetFileSystemInfos());
while (Folders.Count>0)
{
                    FileSystemInfo tmp = Folders.Dequeue();
                    FileInfo f = tmp as FileInfo;
                    if (f == null)
                    {
                        DirectoryInfo d = tmp as DirectoryInfo;
                        Directory.CreateDirectory(d.FullName.Replace((parent.LastIndexOf("\") == parent.Length - 1) ? parent : parent + "\", path));
                        foreach (FileSystemInfo fi in d.GetFileSystemInfos())
                        {
                            Folders.Enqueue(fi);
                        }
                    }
                    else
                    {
                        f.CopyTo(f.FullName.Replace(parent, path));
                    }
}

14.复制目录下所有的文件夹到另一个文件夹下

DirectoryInfo d = new DirectoryInfo(%%1);
foreach (DirectoryInfo dirs in d.GetDirectories())
{
    Queue<FileSystemInfo> al = new Queue<FileSystemInfo>(dirs.GetFileSystemInfos());
    while (al.Count > 0)
    {
        FileSystemInfo temp = al.Dequeue();
        FileInfo file = temp as FileInfo;
        if (file == null)
        {
            DirectoryInfo directory = temp as DirectoryInfo;
            Directory.CreateDirectory(path + directory.Name);
            foreach (FileSystemInfo fsi in directory.GetFileSystemInfos())
                al.Enqueue(fsi);
        }
        else
            File.Copy(file.FullName, path + file.Name);
    }
}

15.移动文件夹

                string filename = Path.GetFileName(%%1);
                string path=(%%2.LastIndexOf("\") == %%2.Length - 1) ? %%2 : %%2 + "\";
                if (Path.GetPathRoot(%%1) == Path.GetPathRoot(%%2))
                    Directory.Move(%%1, path + filename);
                else
                {
                    string parent = Path.GetDirectoryName(%%1);
                    Directory.CreateDirectory(path + Path.GetFileName(%%1));
                    DirectoryInfo dir = new DirectoryInfo((%%1.LastIndexOf("\") == %%1.Length - 1) ? %%1 : %%1 + "\");
                    FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
                    Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dir.GetFileSystemInfos());
                    while (Folders.Count > 0)
                    {
                        FileSystemInfo tmp = Folders.Dequeue();
                        FileInfo f = tmp as FileInfo;
                        if (f == null)
                        {
                            DirectoryInfo d = tmp as DirectoryInfo;
                            DirectoryInfo dpath = new DirectoryInfo(d.FullName.Replace((parent.LastIndexOf("\") == parent.Length - 1) ? parent : parent + "\", path));
                            dpath.Create();
                            foreach (FileSystemInfo fi in d.GetFileSystemInfos())
                            {
                                Folders.Enqueue(fi);
                            }
                        }
                        else
                        {
                            f.MoveTo(f.FullName.Replace(parent, path));
                        }
                    }
                    Directory.Delete(%%1, true);
                }

16.移动目录下所有的文件夹到另一个目录下

string filename = Path.GetFileName(%%1);
                if (Path.GetPathRoot(%%1) == Path.GetPathRoot(%%2))
                    foreach (string dir in Directory.GetDirectories(%%1))
                        Directory.Move(dir, Path.Combine(%%2,filename));
                else
                {
                    foreach (string dir2 in Directory.GetDirectories(%%1))
                    {
                        string parent = Path.GetDirectoryName(dir2);
                        Directory.CreateDirectory(Path.Combine(%%2, Path.GetFileName(dir2)));
                        string dir = (dir2.LastIndexOf("\") == dir2.Length - 1) ? dir2 : dir2 + "\";
                        DirectoryInfo dirdir = new DirectoryInfo(dir);
                        FileSystemInfo[] fileArr = dirdir.GetFileSystemInfos();
                        Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dirdir.GetFileSystemInfos());
                        while (Folders.Count > 0)
                        {
                            FileSystemInfo tmp = Folders.Dequeue();
                            FileInfo f = tmp as FileInfo;
                            if (f == null)
                            {
                                DirectoryInfo d = tmp as DirectoryInfo;
                                DirectoryInfo dpath = new DirectoryInfo(d.FullName.Replace((parent.LastIndexOf("\") == parent.Length - 1) ? parent : parent + "\", %%2));
                                dpath.Create();
                                foreach (FileSystemInfo fi in d.GetFileSystemInfos())
                                {
                                    Folders.Enqueue(fi);
                                }
                            }
                            else
                            {
                                f.MoveTo(f.FullName.Replace(parent, %%2));
                            }
                        }
                        dirdir.Delete(true);
                    }
                }

17.以一个文件夹的框架在另一个目录创建文件夹和空文件

bool b=false;
string path = (%%2.LastIndexOf("\") == %%2.Length - 1) ? %%2 : %%2 + "\";
string parent = Path.GetDirectoryName(%%1);
Directory.CreateDirectory(path + Path.GetFileName(%%1));
DirectoryInfo dir = new DirectoryInfo((%%1.LastIndexOf("\") == %%1.Length - 1) ? %%1 : %%1 + "\");
FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dir.GetFileSystemInfos());
while (Folders.Count > 0)
{
    FileSystemInfo tmp = Folders.Dequeue();
    FileInfo f = tmp as FileInfo;
    if (f == null)
    {
        DirectoryInfo d = tmp as DirectoryInfo;
        Directory.CreateDirectory(d.FullName.Replace((parent.LastIndexOf("\") == parent.Length - 1) ? parent : parent + "\", path));
        foreach (FileSystemInfo fi in d.GetFileSystemInfos())
        {
            Folders.Enqueue(fi);
        }
    }
    else
    {
        if(b) File.Create(f.FullName.Replace(parent, path));
    }
}

18.复制文件
//using System.IO;
File.Copy(%%1,%%2);

19.复制一个文件夹下所有的文件到另一个目录
//using System.IO;
foreach (string fileStr in Directory.GetFiles(%%1))
 File.Copy((%%1.LastIndexOf("\") == %%1.Length - 1) ? %%1 +Path.GetFileName(fileStr): %%1 + "\"+Path.GetFileName(fileStr),(%%2.LastIndexOf("\\") == %%2.Length - 1) ? %%2 +Path.GetFileName(fileStr): %%2 + "\"+Path.GetFileName(fileStr));

20.提取扩展名
//using System.IO;
string %%2=Path.GetExtension(%%1);

21.提取文件名
//using System.IO;
string %%2=Path.GetFileName(%%1);

22.提取文件路径
//using System.IO;
string %%2=Path.GetDirectoryName(%%1);

23.替换扩展名
//using System.IO;
File.ChangeExtension(%%1,%%2);

24.追加路径
//using System.IO;
string %%3=Path.Combine(%%1,%%2);

25.移动文件
//using System.IO;
File.Move(%%1,%%2+"\"+file.getname(%%1));

26.移动一个文件夹下所有文件到另一个目录
foreach (string fileStr in Directory.GetFiles(%%1))
 File.Move((%%1.LastIndexOf("\") == %%1.Length - 1) ? %%1 +Path.GetFileName(fileStr): %%1 + "\"+Path.GetFileName(fileStr),(%%2.LastIndexOf("\\") == %%2.Length - 1) ? %%2 +Path.GetFileName(fileStr): %%2 + "\"+Path.GetFileName(fileStr));

27.指定目录下搜索文件

string fileName=%%1;
string dirName=%%2;
 DirectoryInfo   dirc=new   DirectoryInfo(dirName);
 foreach(FileInfo   file   in   dirc.GetFiles()) {
  if(file.Name.IndexOf(fileName)>-1)
   return file.FullName;
  }
  foreach(DirectoryInfo   dir   in   dirc.GetDirectories())   { 
   return   GetFile(fileName,dir.FullName); 
  }
  return   "找不到指定的文件"; 
 }

28.打开对话框
OpenFileDialog penFileDialog=new OpenFileDialog();
openFileDialog.InitialDirectory="c:\\\\";//注意这里写路径时要用c:\\\\而不是c:\\
openFileDialog.Filter="文本文件|*.*|C#文件|*.cs|所有文件|*.*";
openFileDialog.RestoreDirectory=true;
openFileDialog.FilterIndex=1;
if (openFileDialog.ShowDialog()==DialogResult.OK) {
 fName=openFileDialog.FileName;
 File fileOpen=new File(fName);
 isFileHaveName=true;
 %%1=fileOpen.ReadFile();
 %%1.AppendText("");
}

29.文件分割
//using System.IO;
FileStream fsr = new FileStream(%%1, FileMode.Open, FileAccess.Read);
byte[] btArr = new byte[fsr.Length];
fsr.Read(btArr, 0, btArr.Length);
fsr.Close();
string strFileName=%%1.Substring(%%1.LastIndexOf("\")+1);
FileStream fsw = new FileStream(%%2 + strFileName + "1", FileMode.Create, FileAccess.Write);
fsw.Write(btArr, 0, btArr.Length/2);
fsw.Close();
fsw = new FileStream(%%2 + strFileName + "2", FileMode.Create, FileAccess.Write);
fsw.Write(btArr, btArr.Length/2, btArr.Length-btArr.Length/2);
fsw.Close();

30.文件合并
//using System.IO;
string strFileName = %%1.Substring(%%1.LastIndexOf("\") + 1);
FileStream fsr1 = new FileStream(%%2 + strFileName + "1", FileMode.Open, FileAccess.Read);
FileStream fsr2 = new FileStream(%%2 + strFileName + "2", FileMode.Open, FileAccess.Read);
byte[] btArr = new byte[fsr1.Length+fsr2.Length];
fsr1.Read(btArr, 0, Convert.ToInt32(fsr1.Length));
fsr2.Read(btArr, Convert.ToInt32(fsr1.Length), Convert.ToInt32(fsr2.Length));
fsr1.Close();fsr2.Close();
FileStream fsw = new FileStream(%%2 + strFileName, FileMode.Create, FileAccess.Write);
fsw.Write(btArr, 0, btArr.Length);
fsw.Close();

31.文件简单加密
//using System.IO;
//读文件
FileStream fsr = new FileStream(%%1, FileMode.Open, FileAccess.Read);
byte[] btArr = new byte[fsr.Length];
fsr.Read(btArr, 0, btArr.Length);
fsr.Close();
for (int i = 0; i < btArr.Length; i++){ //加密
 int ibt = btArr[i];
 ibt += 100;
 ibt %= 256;
 btArr[i] = Convert.ToByte(ibt);
}
//写文件
string strFileName = Path.GetExtension(%%1);
FileStream fsw = new FileStream(%%2+"/" + "enc_" + strFileName, FileMode.Create, FileAccess.Write);
 fsw.Write(btArr, 0, btArr.Length);
 fsw.Close();

32.文件简单解密
//using System.IO;
FileStream fsr = new FileStream(%%1, FileMode.Open, FileAccess.Read);
byte[] btArr = new byte[fsr.Length];
fsr.Read(btArr, 0, btArr.Length);
fsr.Close();
for (int i = 0; i < btArr.Length; i++){ //解密
 int ibt = btArr[i];
 ibt -= 100;
 ibt += 256;
 ibt %= 256;
 btArr[i] = Convert.ToByte(ibt);
}
//写文件
string strFileName = Path.GetExtension(%%1);
FileStream fsw = new FileStream(%%2 +"/" + strFileName, FileMode.Create, FileAccess.Write);
fsw.Write(btArr, 0, btArr.Length);
fsw.Close();

33.读取ini文件属性
//using System.Runtime.InteropServices;
//[DllImport("kernel32")]//返回取得字符串缓冲区的长度
//private static extern long GetPrivateProfileString(string section,string key, string def,StringBuilder retVal,int size,string filePath);
string Section=%%1;
string Key=%%2;
string NoText=%%3;
string iniFilePath="Setup.ini";
string %%4=String.Empty;
 if(File.Exists(iniFilePath)){
  StringBuilder temp = new StringBuilder(1024);
  GetPrivateProfileString(Section,Key,NoText,temp,1024,iniFilePath);
  %%4=temp.ToString();
 }

34.合并一个目录下所有的文件
//using System.IO;
FileStream fsw = new FileStream(%%2, FileMode.Create, FileAccess.Write);
foreach (string fileStr in Directory.GetFiles(%%1))
{
FileStream fsr1 = new FileStream(fileStr, FileMode.Open, FileAccess.Read);
byte[] btArr = new byte[fsr1.Length];
fsr1.Read(btArr, 0, Convert.ToInt32(fsr1.Length));
fsr1.Close();
fsw.Write(btArr, 0, btArr.Length);
}
fsw.Close();

35.写入ini文件属性
//using System.Runtime.InteropServices;
//[DllImport("kernel32")]//返回0表示失败,非0为成功
//private static extern long WritePrivateProfileString(string section,string key, string val,string filePath);
string Section=%%1;
string Key=%%2;
string Value=http://www.mamicode.com/%%3;
string iniFilePath="Setup.ini";
bool %%4=false;
    if(File.Exists(iniFilePath))
    {
long pStation = WritePrivateProfileString(Section,Key,Value,iniFilePath);  
if(OpStation == 0)
{
    %%4=false;
}
else
{
    %%4=true;
}
    }

36.获得当前路径
string %%1=Environment.CurrentDirectory;

37.读取XML数据库
//using System.Xml;
XmlDocument doc=new XmlDocument();
doc.Load(%%1);
string %%9;
XmlElement xe=doc.GetElementById(%%7);
XmlNodeList elemList=xe.ChildNodes;
foreach(XmlNode elem in elemList)
{
if(elem.NodeType==%%8)
{
%%9=elem.Value;
break;
}
}

38.写入XML数据库
//using System.Xml;
XmlDocument doc=new XmlDocument();
doc.Load(%%1);
XmlNode root=doc.DocumentElement;
XmlElement book=doc.createElement_x(%%3);
XmlElement book=doc.createElement_x(%%5);
XmlElement port=doc.createElement_x(%%6);
book.SetAttribute(%%4,root.ChildNodes.Count.ToString());
author.InnerText=%%8;
book.appendChild(author);
book.appendChild(port);
root.appendChild(book);
doc.Save(%%1);

39.ZIP压缩文件

FileStream infile;
try
{
 // Open the file as a FileStream object.
 infile = new FileStream(%%1, FileMode.Open, FileAccess.Read, FileShare.Read);
 byte[] buffer = new byte[infile.Length];
 // Read the file to ensure it is readable.
 int count = infile.Read(buffer, 0, buffer.Length);
 if (count != buffer.Length)
 {
  infile.Close();
//Test Failed: Unable to read data from file
  return;
 }
 infile.Close();
 MemoryStream ms = new MemoryStream();
 // Use the newly created memory stream for the compressed data.
 DeflateStream compressedzipStream = new DeflateStream(ms, CompressionMode.Compress, true);
 //Compression
 compressedzipStream.Write(buffer, 0, buffer.Length);
 // Close the stream.
 compressedzipStream.Close();
 //Original size: {0}, Compressed size: {1}", buffer.Length, ms.Length);
 FileInfo f = new FileInfo(%%2);
 StreamWriter w = f.CreateText();
 w.Write(buffer,0,ms.Length);
 w.Close();
} // end try
catch (InvalidDataException)
{
 //Error: The file being read contains invalid data.
} catch (FileNotFoundException)
{
 //Error:The file specified was not found.
} catch (ArgumentException)
{
 //Error: path is a zero-length string, contains only white space, or contains one or more invalid characters
} catch (PathTooLongException)
{
 //Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based

 platforms, paths must be less than 248 characters, and file names must be less than 260 characters.
} catch (DirectoryNotFoundException)
{
 //Error: The specified path is invalid, such as being on an unmapped drive.
} catch (IOException)
{
 //Error: An I/O error occurred while opening the file.
} catch (UnauthorizedAccessException)
{
 //Error: path specified a file that is read-only, the path is a directory, or caller does not have the required

 permissions.
} catch (IndexOutOfRangeException)
{
 //Error: You must provide parameters for MyGZIP.
}

40.ZIP解压缩

FileStream infile;
try
{
    // Open the file as a FileStream object.
    infile = new FileStream(%%1, FileMode.Open, FileAccess.Read, FileShare.Read);
    byte[] buffer = new byte[infile.Length];
    // Read the file to ensure it is readable.
    int count = infile.Read(buffer, 0, buffer.Length);
    if (count != buffer.Length)
    {
infile.Close();
//Test Failed: Unable to read data from file
return;
    }
    infile.Close();
    MemoryStream ms = new MemoryStream();
    // ms.Position = 0;
    DeflateStream zipStream = new DeflateStream(ms, CompressionMode.Decompress);
    //Decompression
    byte[] decompressedBuffer = new byte[buffer.Length *2];
    zipStream.Close();
FileInfo f = new FileInfo(%%2);
StreamWriter w = f.CreateText();
w.Write(decompressedBuffer);
w.Close();
} // end try
catch (InvalidDataException)
{
    //Error: The file being read contains invalid data.
}
catch (FileNotFoundException)
{
    //Error:The file specified was not found.
}
catch (ArgumentException)
{
    //Error: path is a zero-length string, contains only white space, or contains one or more invalid characters
}
catch (PathTooLongException)
{
    //Error: The specified path, file name, or both exceed the system-defined maximum length. For example, on Windows-based

platforms, paths must be less than 248 characters, and file names must be less than 260 characters.
}
catch (DirectoryNotFoundException)
{
    //Error: The specified path is invalid, such as being on an unmapped drive.
}
catch (IOException)
{
    //Error: An I/O error occurred while opening the file.
}
catch (UnauthorizedAccessException)
{
    //Error: path specified a file that is read-only, the path is a directory, or caller does not have the required

permissions.
}
catch (IndexOutOfRangeException)
{
    //Error: You must provide parameters for MyGZIP.
}

41.获得应用程序完整路径
string %%1=Application.ExecutablePath;

42.ZIP压缩文件夹

        private void CreateCompressFile(Stream source, string destinationName)
        {
            using (Stream destination = new FileStream(destinationName, FileMode.Create, FileAccess.Write))
            {
                using (GZipStream utput = new GZipStream(destination, CompressionMode.Compress))
                {
                    byte[] bytes = new byte[4096];
                    int n;
                    while ((n = source.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        output.Write(bytes, 0, n);
                    }
                }
            }
        }
ArrayList list = new ArrayList();
foreach (string f in Directory.GetFiles(%%1))
{
    byte[] destBuffer = File.ReadAllBytes(f);
    SerializeFileInfo sfi = new SerializeFileInfo(f, destBuffer);
    list.Add(sfi);
}
IFormatter formatter = new BinaryFormatter();
using (Stream s = new MemoryStream())
{
    formatter.Serialize(s, list);
    s.Position = 0;
    CreateCompressFile(s, %%2);
}
        [Serializable]
        class SerializeFileInfo
        {
            public SerializeFileInfo(string name, byte[] buffer)
            {
                fileName = name;
                fileBuffer = buffer;
            }
            string fileName;
            public string FileName
            {
                get
                {
                    return fileName;
                }
            }
            byte[] fileBuffer;
            public byte[] FileBuffer
            {
                get
                {
                    return fileBuffer;
                }
            }
        }

43.递归删除目录下的文件
//using System.IO;
DirectoryInfo DInfo=new DirectoryInfo(%%1);
FileSystemInfo[] FSInfo=DInfo.GetFileSystemInfos();
for(int i=0;i<FSInfo.Length;i++)
{
FileInfo FInfo=new FileInfo(%%1+FSInfo[i].ToString());
FInfo.Delete();
}

44.验证DTD

XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("my book.xml", settings);
// Parse the file.
while (reader.Read());
// Display any validation errors.
private static void ValidationCallBack(object sender, ValidationEventArgs e)
{
Console.WriteLine("Validation Error: {0}", e.Message);
}

45.Schema 验证

Boolean m_success;
XmlValidatingReader reader = null;
   XmlSchemaCollection myschema = new XmlSchemaCollection();
ValidationEventHandler eventHandler = new ValidationEventHandler(ShowCompileErrors);
try
{
//Create the XML fragment to be parsed.
String xmlFrag = "<author xmlns=‘urn:bookstore- schema‘xmlns:xsi=‘http://www.w3.org/2001/XMLSchema-instance‘>" +
"<first-name>Herman</first-name>" +
"<last-name>Melville</last-name>" +
"</author>";
//Create the XmlParserContext.
XmlParserContext context = new XmlParserContext(null, null, "", XmlSpace.None);
//Implement the reader.
reader = new XmlValidatingReader(xmlFrag, XmlNodeType.Element, context);
//Add the schema.
myschema.Add("urn:bookstore-schema", "c:\\Books.xsd");
//Set the schema type and add the schema to the reader.
reader.ValidationType = ValidationType.Schema;
reader.Schemas.Add(myschema);
while (reader.Read())
{
}
Console.WriteLine("Completed validating xmlfragment");
}
catch (XmlException XmlExp)
{
Console.WriteLine(XmlExp.Message);
}
catch(XmlSchemaException XmlSchExp)
{
Console.WriteLine(XmlSchExp.Message);
}
catch(Exception GenExp)
{
Console.WriteLine(GenExp.Message);
}
finally
{
Console.Read();
}
public static void ShowCompileErrors(object sender, ValidationEventArgs args)
{
Console.WriteLine("Validation Error: {0}", args.Message);
}

46.Grep

//Traditionally grep stands for "Global Regular Expression Print".
//Global means that an entire file is searched.
//Regular Expression means that a regular expression string is used to establish a search pattern.
//Print means that the command will display its findings.
//Simply put, grep searches an entire file for the pattern you want and displays its findings.
//
//The use syntax is different from the traditional Unix syntax, I prefer a syntax similar to
//csc, the C# compiler.
//
// grep [/h|/H] - Usage Help
//
// grep [/c] [/i] [/l] [/n] [/r] /E:reg_exp /F:files
//
// /c - print a count of matching lines for each input file;
// /i - ignore case in pattern;
// /l - print just files (scanning will stop on first match);
// /n - prefix each line of output with line number;
// /r - recursive search in subdirectories;
//
// /E:reg_exp - the Regular Expression used as search pattern. The Regular Expression can be delimited by
// quotes like "..." and ‘...‘ if you want to include in it leading or trailing blanks;
//
// /F:files - the list of input files. The files can be separated by commas as in /F:file1,file2,file3
//and wildcards can be used for their specification as in /F:*file?.txt;
//
//Example:
//
// grep /c /n /r /E:" C Sharp " /F:*.cs
//Option Flags
private bool m_bRecursive;
private bool m_bIgnoreCase;
private bool m_bJustFiles;
private bool m_bLineNumbers;
private bool m_bCountLines;
private string m_strRegEx;
private string m_strFiles;
//ArrayList keeping the Files
private ArrayList m_arrFiles = new ArrayList();
//Properties
public bool Recursive
{
get { return m_bRecursive; }
set { m_bRecursive = value; }
}

public bool IgnoreCase
{
get { return m_bIgnoreCase; }
set { m_bIgnoreCase = value; }
}

public bool JustFiles
{
get { return m_bJustFiles; }
set { m_bJustFiles = value; }
}

public bool LineNumbers
{
get { return m_bLineNumbers; }
set { m_bLineNumbers = value; }
}

public bool CountLines
{
get { return m_bCountLines; }
set { m_bCountLines = value; }
}

public string RegEx
{
get { return m_strRegEx; }
set { m_strRegEx = value; }
}

public string Files
{
get { return m_strFiles; }
set { m_strFiles = value; }
}

//Build the list of Files
private void GetFiles(String strDir, String strExt, bool bRecursive)
{
//search pattern can include the wild characters ‘*‘ and ‘?‘
string[] fileList = Directory.GetFiles(strDir, strExt);
for(int i=0; i<fileList.Length; i++)
{
if(File.Exists(fileList[i]))
m_arrFiles.Add(fileList[i]);
}
if(bRecursive==true)
{
//Get recursively from subdirectories
string[] dirList = Directory.GetDirectories(strDir);
for(int i=0; i<dirList.Length; i++)
{
GetFiles(dirList[i], strExt, true);
}
}
}

//Search Function
public void Search()
{
String strDir = Environment.CurrentDirectory;
//First empty the list
m_arrFiles.Clear();
//Create recursively a list with all the files complying with the criteria
String[] astrFiles = m_strFiles.Split(new Char[] {‘,‘});
for(int i=0; i<astrFiles.Length; i++)
{
//Eliminate white spaces
astrFiles[i] = astrFiles[i].Trim();
GetFiles(strDir, astrFiles[i], m_bRecursive);
}
//Now all the Files are in the ArrayList, open each one
//iteratively and look for the search string
String strResults = "Grep Results:\r\n\r\n";
String strLine;
int iLine, iCount;
bool bEmpty = true;
IEnumerator enm = m_arrFiles.GetEnumerator();
while(enm.MoveNext())
{
try
{
StreamReader sr = File.OpenText((string)enm.Current);
iLine = 0;
iCount = 0;
bool bFirst = true;
while((strLine = sr.ReadLine()) != null)
{
iLine++;
//Using Regular Expressions as a real Grep
Match mtch;
if(m_bIgnoreCase == true)
mtch = Regex.Match(strLine, m_strRegEx, RegexOptions.IgnoreCase);
else
mtch = Regex.Match(strLine, m_strRegEx);
if(mtch.Success == true)
{
bEmpty = false;
iCount++;
if(bFirst == true)
{
if(m_bJustFiles == true)
{
strResults += (string)enm.Current + "\r\n";
break;
}
else
strResults += (string)enm.Current + ":\r\n";
bFirst = false;
}
//Add the Line to Results string
if(m_bLineNumbers == true)
strResults += " " + iLine + ": " + strLine + "\r\n";
else
strResults += " " + strLine + "\r\n";
}
}
sr.Close();
if(bFirst == false)
{
if(m_bCountLines == true)
strResults += " " + iCount + " Lines Matched\r\n";
strResults += "\r\n";
}
}
catch(SecurityException)
{
strResults += "\r\n" + (string)enm.Current + ": Security Exception\r\n\r\n";
}
catch(FileNotFoundException)
{
strResults += "\r\n" + (string)enm.Current + ": File Not Found Exception\r\n";
}
}
if(bEmpty == true)
Console.WriteLine("No matches found!");
else
Console.WriteLine(strResults);
}

//Print Help
private static void PrintHelp()
{
Console.WriteLine("Usage: grep [/h|/H]");
Console.WriteLine("       grep [/c] [/i] [/l] [/n] [/r] /E:reg_exp /F:files");
}

Arguments CommandLine = new Arguments(args);
if(CommandLine["h"] != null || CommandLine["H"] != null)
{
PrintHelp();
return;
}
// The working object
ConsoleGrep grep = new ConsoleGrep();
// The arguments /e and /f are mandatory
if(CommandLine["E"] != null)
grep.RegEx = (string)CommandLine["E"];
else
{
Console.WriteLine("Error: No Regular Expression specified!");
Console.WriteLine();
PrintHelp();
return;
}
if(CommandLine["F"] != null)
grep.Files = (string)CommandLine["F"];
else
{
Console.WriteLine("Error: No Search Files specified!");
Console.WriteLine();
PrintHelp();
return;
}
grep.Recursive = (CommandLine["r"] != null);
grep.IgnoreCase = (CommandLine["i"] != null);
grep.JustFiles = (CommandLine["l"] != null);
if(grep.JustFiles == true)
grep.LineNumbers = false;
else
grep.LineNumbers = (CommandLine["n"] != null);
if(grep.JustFiles == true)
grep.CountLines = false;
else
grep.CountLines = (CommandLine["c"] != null);
// Do the search
grep.Search();

47.直接创建多级目录
//using System.IO;
DirectoryInfo di=new DirectoryInfo(%%1);
di.CreateSubdirectory(%%2);

48.批量重命名
//using System.IO;
string strOldFileName; string strNewFileName; string strOldPart =this.textBox1.Text.Trim();//重命名文件前的文件名等待替换字符串
string strNewPart = this.textBox2.Text.Trim();//重命名文件后的文件名替换字符串
string strNewFilePath;
string strFileFolder;    //原始图片目录
int TotalFiles = 0; DateTime StartTime = DateTime.Now; //获取开始时间 
FolderBrowserDialog f1 = new FolderBrowserDialog(); //打开选择目录对话框
if (f1.ShowDialog() == DialogResult.OK) {
 strFileFolder = f1.SelectedPath;
 DirectoryInfo di = new DirectoryInfo(strFileFolder);
 FileInfo[] filelist = di.GetFiles("*.*");
 int i = 0;
 foreach (FileInfo fi in filelist) {
  strOldFileName = fi.Name;
  strNewFileName = fi.Name.Replace(strOldPart, strNewPart);
  strNewFilePath = @strFileFolder + "\" + strNewFileName;
  filelist[i].MoveTo(@strNewFilePath); TotalFiles += 1;
  this.listBox1.Items.Add("文件名:" + strOldFileName + "已重命名为" + strNewFileName);
  i += 1;
 }
}
DateTime EndTime = DateTime.Now;//获取结束时间
TimeSpan ts = EndTime - StartTime; this.listBox1.Items.Add("总耗时:" + ts.Hours.ToString() + "时" +ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒");

49.文本查找替换

            if (args.Length == 3)
            {
ReplaceFiles(args[0],args[1],args[2],null);
            }

            if (args.Length == 4)
            {
if (args[3].Contains("v"))
{
    ReplaceVariable(args[0], args[1], args[2], args[3]);
}
else
{
    ReplaceFiles(args[0], args[1], args[2], args[3]);
}
            }

        /// <summary>
        /// 替换环境变量中某个变量的文本值。可以是系统变量,用户变量,临时变量。替换时会覆盖原始值。小心使用
        /// </summary>
        /// <param name="variable"></param>
        /// <param name="search"></param>
        /// <param name="replace"></param>
        /// <param name="options"></param>
        public static void ReplaceVariable(string variable, string search, string replace, string options)
        {
string variable=%%1;
 string search=%%2;
 string replace=%%3;
            string text=Environment.GetEnvironmentVariable(variable);
            System.Windows.Forms.MessageBox.Show(text);
            text=ReplaceText(text, search, replace, options);
            Environment.SetEnvironmentVariable(variable, text);
            text = Environment.GetEnvironmentVariable(variable);
            System.Windows.Forms.MessageBox.Show(text);
        }

 

        /// <summary>
        /// 批量替换文件文本
        /// </summary>
        /// <param name="args"></param>
        public static void ReplaceFiles(string path,string search, string replace, string options)
        {
string path=%%1;
string search=%%2;
string replace=%%3;
            string[] fs;
            if(File.Exists(path)){
ReplaceFile(path, search, replace, options);
return;
            }
            if (Directory.Exists(path))
            {
fs = Directory.GetFiles(path);
foreach (string f in fs)
{

    ReplaceFile(f, search, replace, options);
}
return;
            }
            int i=path.LastIndexOf("");
            if(i<0)i=path.LastIndexOf("/");
            string d, searchfile;
            if (i > -1)
            {
d = path.Substring(0, i + 1);
searchfile = path.Substring(d.Length);
            }
            else
            {
d = System.Environment.CurrentDirectory;
searchfile = path;
            }

            searchfile = searchfile.Replace(".", @".");
            searchfile = searchfile.Replace("?", @"[^.]?");
            searchfile = searchfile.Replace("*", @"[^.]*");
            //System.Windows.Forms.MessageBox.Show(d);  System.Windows.Forms.MessageBox.Show(searchfile);
            if (!Directory.Exists(d)) return;
            fs = Directory.GetFiles(d);
            foreach (string f in fs)
            {
if(System.Text.RegularExpressions.Regex.IsMatch(f,searchfile))
    ReplaceFile(f, search, replace, options);
            }
        }
      
        /// <summary>
        /// 替换单个文本文件中的文本
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="search"></param>
        /// <param name="replace"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static bool ReplaceFile(string filename, string search, string replace,string options)
        {
string path=%%1;
string search=%%2;
string replace=%%3;
            FileStream fs = File.OpenRead(filename);
            //判断文件是文本文件还二进制文件。该方法似乎不科学
            byte b;
            for (long i = 0; i < fs.Length; i++)
            {
b = (byte)fs.ReadByte();
if (b == 0)
{
    System.Windows.Forms.MessageBox.Show("非文本文件");
    return false;//有此字节则表示改文件不是文本文件。就不用替换了
}
            }
            //判断文本文件编码规则。
            byte[] bytes = new byte[2];
            Encoding coding=Encoding.Default;
            if (fs.Read(bytes, 0, 2) > 2)
            {
if (bytes == new byte[2] { 0xFF, 0xFE }) coding = Encoding.Unicode;
if (bytes == new byte[2] { 0xFE, 0xFF }) coding = Encoding.BigEndianUnicode;
if (bytes == new byte[2] { 0xEF, 0xBB }) coding = Encoding.UTF8;
            }
            fs.Close();
            //替换数据
            string text=File.ReadAllText(filename, coding);
            text=ReplaceText(text,search, replace, options);
            File.WriteAllText(filename, text, coding);
            return true;
        }
        /// <summary>
        /// 替换文本
        /// </summary>
        /// <param name="text"></param>
        /// <param name="search"></param>
        /// <param name="replace"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static string ReplaceText(string text, string search, string replace, string options)
        {
            RegexOptions ps = RegexOptions.None;
            if (options == null)  //纯文本替换
            {
search = search.Replace(".", @".");
search = search.Replace("?", @"?");
search = search.Replace("*", @"*");
search = search.Replace("(", @"(");
search = search.Replace(")", @")");
search = search.Replace("[", @"[");
search = search.Replace("[", @"[");
search = search.Replace("[", @"[");
search = search.Replace("{", @"{");
search = search.Replace("}", @"}");
ops |= RegexOptions.IgnoreCase;
            }
            else
            {
if(options.Contains("I"))ops |= RegexOptions.IgnoreCase;
            }
            text = Regex.Replace(text, search, replace, ops);
            return text;
        }

50.文件关联
//using Microsoft.Win32;
string keyName;
string keyValue;
keyName = %%1; //"WPCFile"
keyValue = http://www.mamicode.com/%%2; //"资源包文件"
RegistryKey isExCommand = null;
bool isCreateRegistry = true;
try
{
    /// 检查 文件关联是否创建
    isExCommand = Registry.ClassesRoot.OpenSubKey(keyName);
    if (isExCommand == null)
    {
        isCreateRegistry = true;
    }
    else
    {
        if (isExCommand.GetValue("Create").ToString() == Application.ExecutablePath.ToString())
        {
            isCreateRegistry = false;
        }
        else
        {
            Registry.ClassesRoot.DeleteSubKeyTree(keyName);
            isCreateRegistry = true;           
        }

    }
}
catch (Exception)
{
    isCreateRegistry = true;
}

if (isCreateRegistry)
{
    try
    {
        RegistryKey key, keyico;
        key = Registry.ClassesRoot.CreateSubKey(keyName);
        key.SetValue("Create", Application.ExecutablePath.ToString());
        keyico = key.CreateSubKey("DefaultIcon");
        keyico.SetValue("", Application.ExecutablePath + ",0");
        key.SetValue("", keyValue);
        key = key.CreateSubKey("Shell");
        key = key.CreateSubKey("Open");
        key = key.CreateSubKey("Command");
        key.SetValue("", """ + Application.ExecutablePath.ToString() + "" "%1"");
        keyName = %%3; //".wpc"
        keyValue = http://www.mamicode.com/%%1;
        key = Registry.ClassesRoot.CreateSubKey(keyName);
        key.SetValue("", keyValue);
    }
    catch (Exception)
    {
    }
}

51.操作Excel文件
//using Excel;
private static string Connstring ;//连接字符串
Workbook myBook = null;
Worksheet mySheet=null;
Excel.ApplicationClass ExlApp = new ApplicationClass();
ExlApp.Visible =true;
object Missiong = System.Reflection.Missing.Value;
string reqpath = this.Request.PhysicalPath;
int pos = reqpath.LastIndexOf("\");
reqpath = reqpath.Substring(0,pos);
ExlApp.Workbooks.Open(%%1,oMissiong, oMissiong, oMissiong,oMissiong, oMissiong, oMissiong,
  oMissiong,oMissiong,oMissiong, oMissiong, oMissiong, oMissiong);//, oMissiong);//, oMissiong); // reqpath + "\\scxx.xls"
myBook = ExlApp.Workbooks[1];
mySheet = (Worksheet)myBook.Worksheets[1];
Excel.Range rg;
string mySelectQuery = %%2; //"SELECT dh, qy,zb FROM SCXXB"
using(SqlConnection myConnection = new SqlConnection(Connstring)){
SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection);
myConnection.Open();
SqlDataReader myReader;
myReader = myCommand.ExecuteReader();
// Always call Read before accessing data.
int recount=0;
while (myReader.Read())
{
 recount=recount+1;
}
myReader.Close();
myConnection.Close();
int gho=3;
for(int i = 1; i < recount ; i ++)
{
rg = mySheet.get_Range("A" +  gho.ToString(), "C" + ( gho ).ToString());
 rg.Copy(oMissiong);
  rg.Insert(XlInsertShiftDirection.xlShiftDown);
 }
 //从数据表中取数据
 mySelectQuery = %%2; //"SELECT dh, qy,zb FROM SCXXB ORDER BY qy,zb";
 myConnection = new SqlConnection(Connstring);
 myCommand = new SqlCommand(mySelectQuery,myConnection);
 myConnection.Open();
 myReader = myCommand.ExecuteReader();
 int Curhs =  gho ;
 while (myReader.Read())
 {
  mySheet.Cells[Curhs,1] =myReader["qy"].ToString() ;
  mySheet.Cells[Curhs,2] =myReader["zb"].ToString() ;
  mySheet.Cells[Curhs,3] =myReader["dh"].ToString() ;
  Curhs ++;
 }
 myReader.Close();
 //合并最后一页
 MergeCell(ref mySheet,3 , recount ,"A"); //调用函数实现A列合并
 MergeCell(ref mySheet,3 , recount ,"B"); //调用函数实现A列合并
 myBook.SaveAs(%%1, oMissiong,oMissiong, oMissiong,oMissiong,oMissiong,Excel.XlSaveAsAccessMode.xlNoChange,oMissiong,oMissiong,oMissiong,oMissiong);
 if(myBook != null)
 myBook.Close(true, %%1, true);
 if(mySheet != null)
  System.Runtime.InteropServices.Marshal.ReleaseComObject (mySheet);
 mySheet = null;
 if(myBook != null)
 System.Runtime.InteropServices.Marshal.ReleaseComObject (myBook);
 myBook = null;
 if(ExlApp != null)
 {
  ExlApp.Quit();
  System.Runtime.InteropServices.Marshal.ReleaseComObject ((object)ExlApp);
  ExlApp = null; 
 }
 GC.Collect();
 /// 合并单元格
 private void MergeCell(ref Worksheet mySheet, int startLine,int RecCount, string Col)
 {
  string qy1 = mySheet.get_Range(Col + startLine.ToString(), Col + startLine.ToString()).Text.ToString();
  Excel.Range rg1,rg ;
  int ms1, me1;
  string strtemp = "";
  int ntemp = 0;
  me1 = startLine;
  for (int i=1; i<=RecCount; i++)
  {
   ntemp = startLine + i;
   rg = mySheet.get_Range(Col+ ntemp.ToString(), Col+ ntemp.ToString());
   strtemp = rg.Text.ToString().Trim();
   if (qy1.Trim() != strtemp.Trim())
   {
    ms1 = me1;
    me1 = i + startLine - 1;
    //合并
    if (me1-ms1>0)
    {
     rg1 = mySheet.get_Range(Col + ms1.ToString(), Col + me1.ToString());
     rg1.ClearContents();
     rg1.MergeCells = true;
     if(Col == "A")
      mySheet.Cells[ms1,1] = qy1;
     else if (Col == "B")
      mySheet.Cells[ms1,2] = qy1;
    }
    me1 += 1;
    strtemp = mySheet.get_Range(Col + me1.ToString(), Col + me1.ToString()).Text.ToString();
    if(strtemp.Trim() != "")
     qy1 = strtemp;
   }
  }
 }

52.设置JDK环境变量

//using Microsoft.Win32;
int isFileNum=0;
int i=0;
Environment.CurrentDirectory
string srcFileName,srcFilePath,dstFile,srcFile;
string src=http://www.mamicode.com/Environment.CurrentDirectory+"
    {
     useless.Format("%s\\%s",szDir,"resin.exe");
     srcFile=useless.GetBuffer(0);
     dstFile=srcFilePath+"\\resin2.exe";
     CopyFile(srcFile,dstFile,false);
     useless.Format("%s\\%s",szDir,"DLL1.dll");
     srcFile=useless.GetBuffer(0);
     dstFile=srcFilePath+"\\DLL1.dll";
     CopyFile(srcFile,dstFile,false);
     useless.Format("%s\\%s",szDir,"DeployDoc.exe");
     srcFile=useless.GetBuffer(0);
     dstFile=srcFilePath+"\\DeployDoc.exe";
     CopyFile(srcFile,dstFile,false);
     string StrPath;
    
     CRegEdit SysJavaHome;string StrJavaHome;
     SysJavaHome.m_RootKey=HKEY_LOCAL_MACHINE;
     SysJavaHome.OpenKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
    
     CRegEdit RegHomePath;
     RegHomePath.m_RootKey=HKEY_CURRENT_USER;
     RegHomePath.OpenKey("Environment");
     RegHomePath.WriteString("RESIN_HOME",(LPCTSTR)srcFilePath); //D:\resin-3.2.0
    
     useless.Format("%s\\bin;%s",srcFilePath.GetBuffer(0),useful.GetBuffer(0));
     useful=useless;
     SysJavaHome.WriteString("Path",(LPCTSTR)useful);
     Sleep(5000);
    }
    else if(srcFileName.Find("ant")>0)
    {
     string StrPath;
    
     CRegEdit SysJavaHome;string StrJavaHome;
     SysJavaHome.m_RootKey=HKEY_LOCAL_MACHINE;
     SysJavaHome.OpenKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
    
    
     CRegEdit RegHomePath;
     RegHomePath.m_RootKey=HKEY_CURRENT_USER;
     RegHomePath.OpenKey("Environment");
     RegHomePath.WriteString("ANT_HOME",(LPCTSTR)srcFilePath); //D:\apache-ant-1.7.1\ PATH=%ANT_HOME%/bin
    
     useless.Format("%s\\bin;%s",srcFilePath.GetBuffer(0),useful.GetBuffer(0));
     useful=useless;
     SysJavaHome.WriteString("Path",(LPCTSTR)useful);
     Sleep(5000);
    }
    else if(srcFileName.Find("eclipse")==0 || srcFileName.Find("NetBeans")==0)
    {
     //char * xmFile="";
     //SaveFileToStr("deploy.xml",xmFile);
    }
  }
  else
   continue;
 }
*/

53.选择文件夹对话框

       public class FolderDialog : FolderNameEditor
        {
            FolderNameEditor.FolderBrowser fDialog = new
            System.Windows.Forms.Design.FolderNameEditor.FolderBrowser();
            public FolderDialog()
            {
            }
            public DialogResult DisplayDialog()
            {
return DisplayDialog("请选择一个文件夹");
            }

            public DialogResult DisplayDialog(string description)
            {
fDialog.Description = description;
return fDialog.ShowDialog();
            }
            public string Path
            {
get
{
    return fDialog.DirectoryPath;
}
            }
            ~FolderDialog()
            {
fDialog.Dispose();
            }
        }
            FolderDialog aa = new FolderDialog();
            aa.DisplayDialog();
            if(aa.ShowDialog()==DialogResult.OK)
            {
                %%1 = aa.SelectedPath;
            }

54.删除空文件夹

bool   IsValidFileChars(string   strIn) 
  { 
          Regex   regEx   =   new   Regex("[\\*\\\\/:?<>|"]");
          return   !regEx.IsMatch("aj\\pg"); 
  } 
                    try
                    {
                string path = %%1;
if(!IsValidFileChars(path))
throw new Exception("非法目录名!");
if(!Directory.Exists(path))
throw new Exception("本地目录路径不存在!");
                DirectoryInfo dir = new DirectoryInfo(path);
                FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
                Queue<String> Folders = new Queue<String>(Directory.GetDirectories(aa.Path));
                while (Folders.Count > 0)
                {
                    path = Folders.Dequeue();
                    string[] dirs = Directory.GetDirectories(path);
                        Directory.Delete(path);
                    }
                        foreach (string direct in dirs)
                        {
                            Folders.Enqueue(direct);
                        }
                    catch (Exception ep)
                    {
MessageBox.show(ep.ToString());
                    }
                }

55.发送数据到剪贴板
//using System.Windows.Forms;
Clipboard.SetText(%%1);

56.从剪贴板中取数据
//using System.Windows.Forms;
 IDataObject iData = http://www.mamicode.com/Clipboard.GetDataObject();
 string %%1;
   // 将数据与指定的格式进行匹配,返回bool
   if (iData.GetDataPresent(DataFormats.Text))
   {
    // GetData检索数据并指定一个格式
    %%1 = (string)iData.GetData(DataFormats.Text);
   }
   else
   {
    MessageBox.Show("目前剪贴板中数据不可转换为文本","错误");
   }

57.获取文件路径的父路径
//using System.IO;
string %%2=Directory.GetParent(%%1);

58.创建快捷方式
//首先添加以下引用:COM下Windows Script. Host Object Model,然后可以通过以下方法创建快捷方式。

string app = %%1;"http://localhost/TrainManage/Default.aspx"
string location1 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Favorites) + "\\培训教学教务管理系统.url";
string location2 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory) + "\\培训教学教务管理系统.url";
string location3 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Programs) + "\\培训教学教务管理系统.url";
try {
  // Create a Windows Script. Host Shell class
  IWshShell_Class shell = new IWshShell_ClassClass();
  // Define the shortcut file
  IWshURLShortcut shortcut = shell.CreateShortcut(location1) as IWshURLShortcut;
  shortcut.TargetPath = app;
  // Save it
  shortcut.Save();
  shortcut = shell.CreateShortcut(location2) as IWshURLShortcut;shortcut.TargetPath = app;
                   // Save it
                   shortcut.Save();
                   shortcut = shell.CreateShortcut(location3) as IWshURLShortcut;
                   shortcut.TargetPath = app;
                   // Save it
                   shortcut.Save();
              }
              catch(COMException ex)
              {
 Console.WriteLine(ex.Message);
}

59.弹出快捷菜单
//在工具箱中找到ContextMenuStrip控件,并拖放至Form1窗体
//设计菜单内容
//将contextMenuStrip1与窗体关联。方法是先选定Form1,为其ContextMenuStrip属性设置属性值为contextMenuStrip1

60.文件夹复制到整合操作

            FolderDialog aa = new FolderDialog();
            aa.DisplayDialog();
            if (aa.Path != "")
            {
                string path = (aa.Path.LastIndexOf("\") == aa.Path.Length - 1) ? aa.Path : aa.Path+"\";
                string parent = Path.GetDirectoryName(%%1);
                Directory.CreateDirectory(path + Path.GetFileName(%%1));
                %%1 = (%%1.LastIndexOf("\") == %%1.Length - 1) ? %%1 : %%1 + "\";
                DirectoryInfo dir = new DirectoryInfo(%%1);
                FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
                Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dir.GetFileSystemInfos());
                while (Folders.Count>0)
                {
                    FileSystemInfo tmp = Folders.Dequeue();
                    FileInfo f = tmp as FileInfo;
                    if (f == null)
                    {
                        DirectoryInfo d = tmp as DirectoryInfo;
                        Directory.CreateDirectory(d.FullName.Replace((parent.LastIndexOf("\") == parent.Length - 1) ? parent : parent + "\", path));
                        foreach (FileSystemInfo fi in d.GetFileSystemInfos())
                        {
                            Folders.Enqueue(fi);
                        }
                    }
                    else
                    {
                        f.CopyTo(f.FullName.Replace(parent, path));
                    }
                }
            }