文件操作

来源:互联网 发布:斯塔克大厦数据 编辑:程序博客网 时间:2024/06/07 06:48
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;

class  fileop
{
        
public bool DirState(string d)
        
{
            
//判断目录打开的状态

            
string ServerDir = MapPath(".")+"/";
            
if(!File.Exists(ServerDir+"DirState.dat"))
            
{
                StreamWriter sw 
=File.CreateText(ServerDir+"DirState.dat");
                sw.Write(
"");
                sw.Close();
            }

            StreamReader sr
=new StreamReader(ServerDir+"DirState.dat");
            
string tmp = sr.ReadToEnd();
            sr.Close();
            
string[] s =tmp.Split(new char []{'*'});
            
bool bl=false;
            
foreach(string s1 in s)
            
{
                
if(s1==d)
                
{
                    bl
= true;
                }

            }

            
return bl;
        }

        
        
public string Space(int b)
        
{
            
//添加空格

            
string c ="";
            
for(int m =1;m<=b;m++)
            
{
                c
+="&nbsp;&nbsp;&nbsp;&nbsp;";
            }

            
return c;
        }

        
public string ShortDir(string s)
        
{
            
//将文件的绝对路径转为相对路径

            
string ServerDir = MapPath(".")+"/";
            
string d=s.Substring(ServerDir.Length,s.Length-ServerDir.Length);
            
return d;
        }

        
public string OtherName(string s)
        
{
            
//获取特殊名称,仅为 javascript:Go("...",".../...");

            
string ServerDir = MapPath(".")+"/";
            
string tmp = s.Remove(0,ServerDir.Length);
            
string [] name =tmp.Split(new char []{'/'});
            
string d="";
            
for(int i=0;i<name.Length;i++)
            
{
                
if(i!=0)
                
{
                    d
+="/"+"/"+name[i];
                }

                
else
                
{
                    d
+=name[i];
                }

            }

            
return d;
        }

        
public void BrowseDir(string s,int i,bool b)
        
{
            
//浏览目录

            DirectoryInfo dir 
=new DirectoryInfo(s);
            
foreach(DirectoryInfo di in dir.GetDirectories())    //添加目录信息
            {
                
long ii = this.DirSize(di.FullName);    
                
string size="";
                
if(ii>=1024)
                
{
                    size 
= (ii/1024).ToString()+"&nbsp; KB";
                }

                
else
                
{
                    size 
= ii.ToString()+"&nbsp; 字节";
                }


                
if(b||this.Expand(this.ShortDir(di.FullName))||this.DirState(this.ShortDir(di.FullName)))   //此目录为“打开”状态
                {
                    
this.AddDirState(this.ShortDir(di.FullName));
                    
this.td1.Controls.Add(new LiteralControl(this.Space(i)+"<input type="checkbox" name=""+this.ShortDir(di.FullName)));
                    
this.td1.Controls.Add(new LiteralControl( ""value="dir"><IMG alt="" src="OPENFOLD.BMP">&nbsp;&nbsp;<a href="javascript: Go('open','"+this.OtherName(di.FullName)+"');">"));
                    
this.td1.Controls.Add(new LiteralControl(di.Name+"</a>"+this.Space(2)+"<font size=2>"+size+this.Space(1)));
                    
this.td1.Controls.Add(new LiteralControl(di.LastWriteTime.ToShortDateString()+"  "+di.LastWriteTime.ToShortTimeString()+"</font><br>"));
                    
if(b||this.Expand(this.ShortDir(di.FullName)))   //此目录为“展开” 
                    {
                        
this.BrowseDir(di.FullName,i+2,true);   //继续展开子目录
                    }

                    
else             //此目录为“打开”
                    {
                        
this.BrowseDir(di.FullName,i+2,false);    //显示此目录所有的文件及子目录
                    }

                }

                
else           //此目录为“关闭”状态
                {
                    
this.td1.Controls.Add(new LiteralControl(this.Space(i)+"<input type="checkbox" name=""+this.ShortDir(di.FullName)));
                    
this.td1.Controls.Add(new LiteralControl( ""value="dir"><IMG alt="" src="CLSDFOLD.BMP">&nbsp;&nbsp;<a href="javascript: Go('open','"+this.OtherName(di.FullName)+"');">"));
                    
this.td1.Controls.Add(new LiteralControl(di.Name+"</a>"+this.Space(2)+"<font size=2>"+size+this.Space(1)));
                    
this.td1.Controls.Add(new LiteralControl(di.LastWriteTime.ToShortDateString()+"  "+di.LastWriteTime.ToShortTimeString()+"</font><br>"));
                }


            }

            
foreach(FileInfo fi in dir.GetFiles())
            
{
                
string fi_tmp="";
                
if(fi.Length>=1024)
                
{
                    fi_tmp 
= (fi.Length/1024).ToString()+"&nbsp; KB";
                }

                
else
                
{
                    fi_tmp 
= fi.Length.ToString()+"&nbsp; 字节";
                }


                
//添加文件信息

                
this.td1.Controls.Add(new LiteralControl(this.Space(i)+"<input type="checkbox" name=""+this.ShortDir(fi.FullName)));
                
this.td1.Controls.Add(new LiteralControl( ""value="file"><IMG alt="" src="TXT.BMP">&nbsp;&nbsp;<a href="javascript: Go('open','"+this.OtherName(fi.FullName)+"');">"));
                    
this.td1.Controls.Add(new LiteralControl(fi.Name+"</a>"+this.Space(2)+"<font size=2>"+fi_tmp+this.Space(1)));
                
this.td1.Controls.Add(new LiteralControl(fi.LastWriteTime.ToShortDateString()+" "+fi.LastWriteTime.ToShortTimeString()+"</font><br>"));
            }
        
        }


        
public bool Expand(string s)
        
{
            
//判断此目录是否需要展开
            string[] tmp=this.Expand_Dir.Split(new char []{'*'});
            
bool b =false;
            
foreach(string dd in tmp)
            
{
                
if(dd==s)
                
{
                    b
=true;
                }

            }

            
return b;
        }

        
public void NameExisted(int i,string s, out string ss)
        
{
            
//如果文件名称已存在,则重新命名

            
string[] tmp =s.Split(new char []{'/'});
            
string name=tmp[tmp.Length-1];    //从文件的绝对路径名分离出文件名              
            int l=s.LastIndexOf("/")+1;
        A:    
int j=name.LastIndexOf(")")-name.LastIndexOf("("); 
            
if(Directory.Exists(s))              //文件夹的重新命名
              {
                  i
++;
                  
if(j>1&&name.Length==name.LastIndexOf(")")+1)         //判断是否以(i)结尾
                  {
                      name
=name.Remove(name.LastIndexOf("("),j+1);
                  }

                  name
+="("+i.ToString()+")";
                  s
=s.Remove(l,s.Length-l);
                  s
+=name;
                  
goto A;
              }

              
else if(File.Exists(s))        //重新命名文件
              {
                  i
++;
                  
int n =name.LastIndexOf(".");
                  
if(n<0)                         //是否有后缀名
                  {
                      
if(j>1&&name.Length==name.LastIndexOf(")")+1)
                      
{
                          name
=name.Remove(name.LastIndexOf("("),j+1);
                      }

                      name
+="("+i.ToString()+")";
                  }

                  
else
                  
{
                      
if(j>1 && n==name.LastIndexOf(")")+1)    //后缀名是否紧挨着(i)
                      {
                          name
=name.Remove(name.LastIndexOf("("),j+1);
                      }
 
                      
                      name
=name.Insert(name.LastIndexOf("."),"("+i.ToString()+")");
                  }

                  s
=s.Remove(l,s.Length-l);
                  s
+=name;
                  
goto A;
              }

            ss
=s;
        }


        
public void ClearDirState()
        
{
            
//清理  DirState.dat 文件

            
string ServerDir = MapPath(".")+"/";
            StreamReader sr 
= new StreamReader(ServerDir+"DirState.dat");
            
string tmp = sr.ReadToEnd();
            sr.Close();
            
string[] tmp2 = tmp.Split(new char []{'*'});
            
foreach(string s in tmp2)
            
{
                
if(s!="")
                
{
                    
if(!Directory.Exists(ServerDir+s))
                    
{
                        tmp
=tmp.Replace(s+"*","");
                    }

                }

            }

            StreamWriter sw 
=File.CreateText(ServerDir+"DirState.dat");
            sw.Write(tmp);
            sw.Close();
        }


        
public void AddDirState(string s)
        
{
            
//向 DirState.dat 添加目录

            
string ServerDir = MapPath(".")+"/";
            StreamReader sr
=new StreamReader(ServerDir+"DirState.dat");
            
string tmp = sr.ReadToEnd();
            sr.Close();
            
if(tmp.IndexOf(s+"*")<0)
            
{
                StreamWriter sw 
=File.AppendText(ServerDir+"DirState.dat");
                sw.Write(s
+"*");
                sw.Close();
            }

        }


        
public long DirSize(string s)
        
{
            
//获取目录的大小

            
long i=0L;
            DirectoryInfo dir 
= new DirectoryInfo(s);
            
foreach (FileInfo f in dir.GetFiles())
            
{
                i
+=f.Length;
            }

            
foreach(DirectoryInfo subdir in dir.GetDirectories())
            
{
                i
+=this.DirSize(subdir.FullName);
            }

            
return i;
        }


        
public bool CheckName(string s)
        
{
            
//检查文件名是否合法

            
bool b=true;
            
if(s.IndexOfAny(new char[]{'?','/','/','<','>',':','*','"','|'})>=0||s=="")
            
{
                b
=false;
            }

            
return b;
        }


        
public void CopyDir(string s, string d)      
        
{
            
//复制目录的方法

            Directory.CreateDirectory(d);
            DirectoryInfo di 
=new DirectoryInfo(s);
            
foreach(DirectoryInfo dir in di.GetDirectories())
            
{
                
this.CopyDir(dir.FullName,d+"/"+dir.Name);
            }

            
foreach(FileInfo fi in di.GetFiles())
            
{
                fi.CopyTo(d
+"/"+fi.Name,true);
            }

        }

}
原创粉丝点击