📄 cdirectory.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 + -