1)简洁 简单的代码:

/***新建文件夹***/#region/***新建文件夹***/

/**//// <summary>
/// 新建文件夹
/// </summary>
/// <returns></returns>
public void NewDir()

{
if(this._tree.SelectedNode == null)
return;

TreeNode node = this._tree.SelectedNode;
DirectoryInfo dirObj = this.GetDirObj(node);

if(dirObj.Attributes.ToString().IndexOf("ReadOnly") != -1 || dirObj.Attributes.ToString().IndexOf("System") != -1)
return;

TreeNode tmpnode = this.AddSelectedNodeChild("新建文件夹");
this._tree.SelectedNode = tmpnode;
IsNewDir = true;
this.RenameSelectedNode();
}
#endregion

/***加子节点***/#region/***加子节点***/

/**//// <summary>
/// 给选中的节点增加子节点
/// </summary>
/// <param name="NodeText"></param>
/// <returns></returns>
private TreeNode AddSelectedNodeChild(string NodeText)

{
if(_tree.SelectedNode == null)

{
return null;
}
TreeNode node = new TreeNode(NodeText);
_tree.SelectedNode.Nodes.Add(node);
return node;
}
#endregion
private void _tree_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)

{
TreeNode node = this._tree.SelectedNode;
if(IsNewDir)

{
DirectoryInfo dirObj = this.GetDirObj(node.Parent);
try

{
if(e.Label == null)
dirObj.CreateSubdirectory(e.Node.Text);
else
dirObj.CreateSubdirectory(e.Label);
}
catch(Exception ex)

{
MessageBox.Show(ex.Message);
}
finally

{
IsNewDir = false;
}
}
}
2)
在NetDisk下DownLoad.cs中新建文件夹的部分代码:
如果新建文件夹已经存在,则,给新建文件夹编号。检查文件夹命名是否合法,长度 等 。
FoloderControl 是目录操作类。this.pre_Path为程序运行路径。

//新建
private void menuItem1_Click(object sender, System.EventArgs e)

{
string foldername="新建文件夹";
GetFolderName(foldername);
if(!flagNew)

{
foldername="新建文件夹";
}
else

{
if(this.returnNameId!=-1)

{
foldername="新建文件夹 ("+this.returnNameId.ToString()+")";
}
}

string fpath = this.pre_Path + this.tv_Path.SelectedNode.FullPath + @"\"+foldername;
TreeNode newNode =new TreeNode(foldername);

try

{
this.tv_Path.SelectedNode.Nodes.Add(newNode);
this.tv_Path.SelectedNode = newNode;
oldFolder=this.tv_Path.SelectedNode.Text;


this.tv_Path.LabelEdit = true;
if (!newNode.IsEditing)
newNode.BeginEdit();
}
catch (Exception err)

{
MessageBox.Show(this, err.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
oldFolder=this.tv_Path.SelectedNode.Text;
}

private void GetFolderName(string name)

{
ArrayList arr=new ArrayList();
string tempName=name;
string rootPath=this.pre_Path + this.tv_Path.SelectedNode.FullPath;
DirectoryInfo di = new DirectoryInfo(rootPath);
DirectoryInfo[] AllSubDir = di.GetDirectories();
for(int i=0;i<AllSubDir.Length;i++)

{

int index1=AllSubDir[i].Name.IndexOf(name);
if(index1>=0)

{
tempName=AllSubDir[i].Name.Substring(index1+name.Length);
tempName=tempName.Trim();
if(tempName!="")

{
tempName=tempName.Substring(1,tempName.Length-2);
arr.Add(tempName);
tempName=string.Empty;
}
else

{
// 有"新建文件夹"
flagNew=true;
this.returnNameId=2;
}
}
else

{
tempName=string.Empty;
}
}

CheckArrayList(arr) ;
}

private void tv_Path_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)


{
newFolder=e.Node.Text.Trim();
try

{
if (e.Label != null)

{
newFolder=e.Label;
if (e.Label.Length > 0)

{
string fpath =this.pre_Path+ this.tv_Path.SelectedNode.Parent.FullPath + @"\" + e.Label.Trim();

if (!NameAvaiCheck(e,e.Label.Trim()))
// 名称合法

{
if (!Directory.Exists(fpath))

{
string oldpath=this.pre_Path + this.tv_Path.SelectedNode.Parent.FullPath + @"\"+oldFolder;
if(!Directory.Exists(oldpath))

{

FoloderControl.DirectCreat(fpath);
}
else

{
FoloderControl.DirectChange(fpath,oldpath);
}
e.Node.EndEdit(true);
this.txtPath.Text=fpath;
}
else

{
e.CancelEdit = true;
MessageBox.Show(this,"文件夹名已存在。","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Error);
this.tv_Path.LabelEdit = true;
e.Node.BeginEdit();
}
}
}
else

{
e.CancelEdit = true;
MessageBox.Show(this,"文件夹名不能为空。","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Error);
this.tv_Path.LabelEdit = true;
e.Node.BeginEdit();
}
}
else //e.Label==null

{
string creatfpath=this.pre_Path + this.tv_Path.SelectedNode.FullPath;

if(!Directory.Exists(creatfpath))

{
FoloderControl.DirectCreat(creatfpath);
}
else

{
e.CancelEdit = true;
}
}
}
catch (Exception err)

{
e.Node.EndEdit(true);
MessageBox.Show(this,err.Message,"",MessageBoxButtons.OK,MessageBoxIcon.Error);

}
finally

{
// this.tv_Path.LabelEdit = false;
}
}

