在这种情况下,我从上下文条菜单中选择选项,在这种情况下“删除” 然后我检查我在treeView1中选择的节点是文件还是目录。
private void menuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
bool file = false;
if (e.ClickedItem.Text == "Delete")
{
if (treeView1.SelectedNode.Tag != null)
{
string s = (string)treeView1.SelectedNode.Tag; // this is casting
if (s == "file")
{
file = false;
DeleteFile(treeView1.SelectedNode.FullPath,file);
}
}
else
{
file = true;
DeleteFile(treeView1.SelectedNode.FullPath,file);
}
}
}
然后在DeleteFile方法中,如果它是一个目录makeDirectory,我检查它是否是一个文件生成DeleteFile。
private void DeleteFile(string remoteFile, bool fileordir)
{
remoteFile = remoteFile.Replace('\\', '/');
if (remoteFile.StartsWith("root"))
{
remoteFile = remoteFile.Replace("root", string.Empty);
}
string deleteRequest = txtHost.Text + remoteFile;
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + deleteRequest);
if (fileordir == false)
{
request.Method = WebRequestMethods.Ftp.DeleteFile;
}
else
{
request.Method = WebRequestMethods.Ftp.RemoveDirectory;
}
request.Credentials = new NetworkCredential(txtUsername.Text, txtPassword.Text);
request.Proxy = null;
request.UseBinary = false;
request.UsePassive = true;
request.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream);
sr.ReadToEnd();
string StatusCode = response.StatusDescription;
sr.Close();
response.Close();
}
问题是我是否想要具有内部子目录和文件的RemoveDirectory。 例如,如果remoteFile包含:/b/c/d/e/test.jpg那么它的文件就会删除test.jpg 此外,如果remoteFile是:/ test.jpg它是一个文件,它将删除test.jpg
但是现在我想删除我在treeView中选择的目录一个目录节点,但我不知道是否以及有多少子目录和文件可能在里面。
例如,如果在remoteFile中我有:/ b / c / d / e / f / gi将收到错误,因为RemoveDirectory不知道将其删除为一个字符串我必须首先进行递归循环删除:/ b / c / d / e / f / g这将删除子目录g 然后/ b / c / d / e / f将删除目录f / b / c / d / e然后b / c / d然后/ b / c然后/ b
如果在那些子目录中有某个文件/ s我还需要以某种方式在递归循环中使用FileDelete。
当我从treeView中选择一个节点并且它是一个目录并且需要创建RemoveDirectory时,我如何构建递归循环?
答案 0 :(得分:1)
要递归删除目录,您的" RemoveDirectory"方法应该:
答案 1 :(得分:1)
尝试这样的事情
public static class FooClass
{
public void DeleteDirectory(string path)
{
foreach (string directory in Directory.EnumerateDirectories(path))
{
DeleteDirectory(directory);
}
foreach (string file in Directory.EnumerateFiles(path))
{
File.Delete(file);
}
Directory.Delete(path);
}
}
然后,您只需要将起始路径传递给该函数,它将递归删除最远目录的所有文件,删除它,并继续运行直到达到指定的目录级别。