查看此代码:
private void confirmBtn_Click(object sender, EventArgs e)
{
string[] filePaths = System.IO.Directory.GetFiles(@"C:\test\", "*.txt");
foreach (string filePath in filePaths)
{
if (filePath.EndsWith(".txt")) return;
MessageBox.Show("Delete All Text Files?", "Delete Verification"
, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes
{
System.IO.File.Delete(filePath);
}
}
我想创建一个程序,它将删除特定目录中的所有.txt文件,并创建“是”或“否”按钮,单击“是”=“否”时取消。
答案 0 :(得分:2)
在进入循环之前询问问题,并且无需检查扩展名,因为您已经要求仅返回带有TXT扩展名的文件 顺便说一下测试
if (filePath.EndsWith(".txt")) return;
是阻止删除原始代码中任何文件(并反复询问同一问题)的原因
if(MessageBox.Show("Delete All Text Files?", "Delete Verification"
, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
string[] filePaths = System.IO.Directory.GetFiles(@"C:\test\", "*.txt");
foreach (string filePath in filePaths)
System.IO.File.Delete(filePath);
}
答案 1 :(得分:1)
您的状况检查无效:。
第一个条件应该是:
if (!filePath.EndsWith(".txt")) return;
和第二:
DialogResult res = MessageBox.Show("Delete All Text Files?", "Delete Verification", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if( res == DialogResult.Yes)
{
System.IO.File.Delete(filePath);
}
答案 2 :(得分:0)
在代码中,当找到txt文件时,您将返回。而它应该是另一种方式。
if (filePath.EndsWith(".txt"))
return;
应该是
if (!filePath.EndsWith(".txt"))
return;
这应该这样做
string directoryPath = @"C:\test\";
string extension = "*.txt";
if (!Directory.Exists(directoryPath))
return;
DirectoryInfo di = new DirectoryInfo(directoryPath);
FileInfo[] files = di.GetFiles(extension).Where(p => p.Extension.ToLowerInvariant() == ".txt").ToArray();
foreach (FileInfo file in files)
{
file.Attributes = FileAttributes.Normal;
File.Delete(file.FullName);
}
答案 3 :(得分:-1)
你必须把问题放在循环之外。您的代码会为它看到的每个文件执行MessageBox,这与您的问题“删除所有文本文件?”相矛盾。