⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdirectory.cs

📁 文件系统管理 在内存中为文件开辟存储空间 可以创建文件和文件夹 (至少有两级目录 :模拟DOS文件系统的操作 可以存储文件的内容 可以查看删除和修改文件(15 2
💻 CS
字号:
using System;
using System.IO;
using System.Collections;

namespace FSM
{
	/// <summary>
	/// Class2 的摘要说明。
	/// </summary>
	public class cDirectory
	{
		public cDirectory()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}	
		static int recursionPass = 0;	
		string rootdir = "";
		
		public void Create(string path)
		{
			if( path.IndexOf(":") == 1 )//file name is full path
			{
				if( Directory.Exists( path) )
				{
					Console.Write( "目录'" + path + "'已经存在,请重新建立目录\n");		
					return;
				}
			}
			else//file name is opposite path
			{
				path = Directory.GetCurrentDirectory() + @"\" + path;
			}
		{
			try 
			{
				// Determine whether the directory exists.
				if (!Directory.Exists(path)) 
				{	
					Directory.CreateDirectory(path);
					return;
				}

				} 
			catch (Exception error) 
			{
				Console.WriteLine(error.Message);
			}
		}
		}


	
		public void Delete(string path)
		{				
			FileInfo filefi;
			cFile f = new cFile();
			string confirm = "N";

			if( recursionPass == 0 )
			{
				rootdir = path;
			}
			if( Directory.Exists(path))
			{
				if( recursionPass == 0 )
				{
					Console.WriteLine( "警告!即将删除该目录及其目录中的所有文件,确定删除?Y/N " );
					confirm = Console.ReadLine().ToLower();
				}
				if( confirm == "y" | recursionPass > 0)
				{
					System.Collections.ArrayList ary = new System.Collections.ArrayList();//建立一个动态的数组
					try
					{
						if( Directory.Exists(path) )
						{
							ary.AddRange( Directory.GetDirectories(path) );//把目录加入数组
							ary.AddRange( Directory.GetFiles(path) );//把文件加入数组
							string[] file = new string[ ary.Count ];
							for( int i = 0; i < file.Length; i++)//把动态的数组里面的数据加到数组file里面
							{
								file[i] = (string) ary[i];
							}
							
							for( int i = 0; i < file.Length; i++)
							{
								if( (File.GetAttributes( file[i] ) & FileAttributes.Directory) != FileAttributes.Directory )
								{
									filefi = new FileInfo( file[i] );
									f.DeleteNoConfirm(path+ @"\" + filefi.Name);
								}
								else
								{	
									filefi = new FileInfo( file[i] );
									recursionPass ++;
									this.Delete( path+ @"\" + filefi.Name );
									Directory.Delete(path+ @"\" + filefi.Name );
								}
							}
							if( (Directory.GetFiles( rootdir ).Length + Directory.GetDirectories(rootdir).Length) == 0 )
							{
								Directory.Delete(rootdir);
							}
						}
						else
						{
							Console.WriteLine("该目录不存在!");
							return;
						}
					}

					catch( Exception error )
					{
						Console.Write( error.Message + "\n");		
						return;
					}
				}
			}
		}
		public void DeleteNoConfirm(string path)
		{				
			FileInfo filefi;
			cFile f = new cFile();			

			if( recursionPass == 0 )
			{
				rootdir = path;
			}
			if( Directory.Exists(path))
			{
				
				System.Collections.ArrayList ary = new System.Collections.ArrayList();//建立一个动态的数组
				try
				{
					if( Directory.Exists(path) )
					{
						ary.AddRange( Directory.GetDirectories(path) );//把目录加入数组
						ary.AddRange( Directory.GetFiles(path) );//把文件加入数组
						string[] file = new string[ ary.Count ];
						for( int i = 0; i < file.Length; i++)//把动态的数组里面的数据加到数组file里面
						{
							file[i] = (string) ary[i];
						}
							
						for( int i = 0; i < file.Length; i++)
						{
							if( (File.GetAttributes( file[i] ) & FileAttributes.Directory) != FileAttributes.Directory )
							{
								filefi = new FileInfo( file[i] );
								f.DeleteNoConfirm(path+ @"\" + filefi.Name);
							}
							else
							{	
								filefi = new FileInfo( file[i] );
								recursionPass ++;
								this.Delete( path+ @"\" + filefi.Name );
								Directory.Delete(path+ @"\" + filefi.Name );
							}
						}
						if( (Directory.GetFiles( rootdir ).Length + Directory.GetDirectories(rootdir).Length) == 0 )
						{
							Directory.Delete(rootdir);
						}
					}
					else
					{
						Console.WriteLine("该目录不存在!");
						return;
					}

				}
				catch( Exception error )
				{
					Console.Write( error.Message + "\n");		
					return;
				}
				
			}
		}

		
		public void List(string listDirectory)
		{   
			FileInfo fi;
			DirectoryInfo di;
			long filesize = 0;
			long filecount = 0;
			long dircount = 0;
			string[] subDirectory;


			if( Directory.Exists(listDirectory) )
			{
				subDirectory=Directory.GetFiles(listDirectory);
			}
			else
			{
				subDirectory = null;
			}
			if(subDirectory==null)
			{
				Console.WriteLine ("该目录为空");
			}
			else
			{
				string[] listSubDirectory=Directory.GetFileSystemEntries(listDirectory);
				Console.WriteLine("该目录下有以下目录和文件:\n");				
				foreach(string listSubDirectoryName in listSubDirectory)
				{
					if( (File.GetAttributes( listSubDirectoryName) & FileAttributes.Directory) != FileAttributes.Directory )
					{
						fi = new FileInfo (listSubDirectoryName);
						filecount ++;
						filesize += fi.Length;
						Console.WriteLine(Directory.GetCreationTime(listSubDirectoryName).ToString()+"\t"+fi.Length.ToString().PadLeft(8)+"字节\t"+fi.Name);
					}
					else
					{
						di = new DirectoryInfo(listSubDirectoryName);
						dircount ++;
						Console.WriteLine(Directory.GetCreationTime(listSubDirectoryName).ToString()+"\t"+"<目录> ".PadLeft(8)+"\t"+di.Name);
					}
				
				}
				Console.WriteLine("\n目录名: "+listDirectory +"\n");
				Console.WriteLine("共计,");
				Console.WriteLine("目录 " + dircount + " 个");
				Console.WriteLine("文件 " + filecount + " 个");
				Console.WriteLine("文件大小 " + filesize + " 字节。");
				
			}	
		}
		public void Move(string sourceDirectory,string destDirectory)
		{
			cFile f = new cFile();
			FileInfo srcfi;
			FileInfo desfi;
			System.Collections.ArrayList ary = new System.Collections.ArrayList();
			  			 
			if( sourceDirectory.IndexOf(":") == 1 & destDirectory.IndexOf(":") == 1)//file name is full path
			{    	
				int directoryExsites=sourceDirectory.CompareTo(destDirectory);
				if(directoryExsites==0)
				{
					Console.WriteLine("不能把原目录移动到现在的路径");	
					
				}
				else
				{
					try
					{
						Directory.CreateDirectory( destDirectory );
						if( Directory.Exists(destDirectory) )
						{
							ary.AddRange( Directory.GetDirectories(sourceDirectory) );
							ary.AddRange( Directory.GetFiles(sourceDirectory) );
							string[] file = new string[ ary.Count ];
							for( int i = 0; i < file.Length; i++)
							{
								file[i] = (string) ary[i];
							}
							for( int i = 0; i < file.Length; i++)
							{
								if( (File.GetAttributes( file[i] ) & FileAttributes.Directory) != FileAttributes.Directory )
								{
									//Move file
									srcfi = new FileInfo( file[i] );
									f.Move(file[i], destDirectory + @"\" + srcfi.Name);
								}
								else
								{
									//Move directory
									desfi = new FileInfo( file[i] );
									Move( file[i], (destDirectory + @"\" + desfi.Name) );									
								}
							}
							this.DeleteNoConfirm(sourceDirectory);
						}
						else
						{
							Console.WriteLine("目录复制部分失败");
							return;
						}
					}

					catch( Exception error )
					{
						Console.Write( error.Message + "\n");		
						return;
					}
				}
			}						

		}
		

	      public void Copy(string sourceDirectory,string destDirectory)
         {
			  cFile f = new cFile();
			  FileInfo srcfi;
			  FileInfo desfi;
			  System.Collections.ArrayList ary = new System.Collections.ArrayList();
			  			 
			   if( sourceDirectory.IndexOf(":") == 1 & destDirectory.IndexOf(":") == 1)//file name is full path
			  {    	
				  int directoryExsites=sourceDirectory.CompareTo(destDirectory);
				  if(directoryExsites==0)
				  {
					  Console.WriteLine("不能把原目录复制到现在的路径");	
					
				  }
				  else
				  {
					  try
					  {
						  Directory.CreateDirectory( destDirectory );
						  if( Directory.Exists(destDirectory) )
						  {
							  ary.AddRange( Directory.GetDirectories(sourceDirectory) );
							  ary.AddRange( Directory.GetFiles(sourceDirectory) );
							  string[] file = new string[ ary.Count ];
							  for( int i = 0; i < file.Length; i++)
							  {
								  file[i] = (string) ary[i];
							  }
							  for( int i = 0; i < file.Length; i++)
							  {
								  if( (File.GetAttributes( file[i] ) & FileAttributes.Directory) != FileAttributes.Directory )
								  {
									  srcfi = new FileInfo( file[i] );
									  f.Copy(file[i], destDirectory + @"\" + srcfi.Name);
								  }
								  else
								  {
									  desfi = new FileInfo( file[i] );
									  Copy( file[i], (destDirectory + @"\" + desfi.Name) );
								  }
							  }
						  }
						  else
						  {
							   Console.WriteLine("目录复制部分失败");
							  return;
						  }
					  }

					  catch( Exception error )
					  {
						  Console.Write( error.Message + "\n");		
						  return;
					  }

				  }
			  }
						
			  else//file name is opposite path
			  {
				  Console.WriteLine("请输入完整的目录路径");
				  Console.WriteLine("copy [源目录完整路径],[目的目录完整路径)");
			  }

				
	
    }
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -