C# 循环映射文件夹中的现有文件
当用户单击C# 循环映射文件夹中的现有文件,c#,C#,当用户单击btnCheck时,我正在尝试验证。这将触发isAllRequiredFilesExist。该过程需要检查所有指定的文件名fileNameRequired。如果找不到文件,则终止进程并显示错误消息,否则进程将继续,直到选中所有文件名并将其存在于映射文件夹中 我拥有的当前代码,它只迭代一次,然后停止。我认为中的循环语句有问题,它是所有必需文件存在的。在检查并存在所有文件名之前,代码不应点击validateData() 谁能告诉我有没有更好的方法来解决这个问题。多谢各位 protected
btnCheck
时,我正在尝试验证。这将触发isAllRequiredFilesExist
。该过程需要检查所有指定的文件名fileNameRequired
。如果找不到文件,则终止进程并显示错误消息,否则进程将继续,直到选中所有文件名并将其存在于映射文件夹中
我拥有的当前代码,它只迭代一次,然后停止。我认为中的循环语句有问题,它是所有必需文件存在的。在检查并存在所有文件名之前,代码不应点击validateData()
谁能告诉我有没有更好的方法来解决这个问题。多谢各位
protected void btnCheck_Click(object sender, EventArgs e)
{
string Message = string.Empty;
string pathDirectory = Server.MapPath("~/UploadFiles/");
try
{
//need to check all file names exist before execute ValidateData()
if (isAllRequiredFilesExist())
{
validateData();
}
}
catch (Exception ex)
{
Message = ex.Message;
}
}
/// <summary>
/// Check if all required data Exist
/// If one required file is missing then notify the user and end the process otherwise it will loop until all names in filenameRequired.
/// </summary>
/// <returns></returns>
public bool isAllRequiredFilesExist()
{
string pathDirectory = Server.MapPath("~/UploadFiles/");
string[] fileNameRequired = { "test1.txt", "test2.txt", "test3.txt" };
//Check if all the required file exist in the folder
foreach (string names in fileNameRequired)
{
//Loop through the folder
//if there is a missing file then notified the user
foreach (string fileNameToCheck in Directory.EnumerateFiles(pathDirectory, names, SearchOption.AllDirectories))
{
if (!File.Exists(fileNameToCheck))
{
lblMessage.Text = "Missing file: " + names;
return false;
}
else
{
return true;
}
}
}
return false;
}
protectedvoidbtncheck\u单击(对象发送方,事件参数e)
{
string Message=string.Empty;
字符串pathDirectory=Server.MapPath(“~/UploadFiles/”);
尝试
{
//在执行ValidateData()之前,需要检查所有文件名是否存在
如果(isAllRequiredFilesExist())
{
验证数据();
}
}
捕获(例外情况除外)
{
消息=例如消息;
}
}
///
///检查是否存在所有必需的数据
///如果缺少一个必需的文件,则通知用户并结束该过程,否则它将循环,直到filenameRequired中的所有名称。
///
///
公共布尔值为AllRequiredFilesExist()
{
字符串pathDirectory=Server.MapPath(“~/UploadFiles/”);
字符串[]fileNameRequired={“test1.txt”、“test2.txt”、“test3.txt”};
//检查文件夹中是否存在所有必需的文件
foreach(fileNameRequired中的字符串名称)
{
//循环浏览文件夹
//如果有丢失的文件,则通知用户
foreach(字符串fileNameToCheck in Directory.EnumerateFiles(pathDirectory,names,SearchOption.AllDirectories))
{
如果(!File.Exists(fileNameToCheck))
{
lblMessage.Text=“缺少文件:”+名称;
返回false;
}
其他的
{
返回true;
}
}
}
返回false;
}
问题在于您的isAllRequiredFilesExist
-如果单个文件存在,则返回true。更改如下:
public bool isAllRequiredFilesExist()
{
string pathDirectory = Server.MapPath("~/UploadFiles/");
string[] fileNameRequired = { "test1.txt", "test2.txt", "test3.txt" };
//Check if all the required file exist in the folder
foreach (string names in fileNameRequired)
{
//Loop through the folder
//if there is a missing file then notified the user
foreach (string fileNameToCheck in Directory.EnumerateFiles(pathDirectory, names, SearchOption.AllDirectories))
{
if (!File.Exists(fileNameToCheck))
{
lblMessage.Text = "Missing file: " + names;
return false;
}
}
}
return true;
}
因此,如果任何给定的文件丢失,它将返回false,如果所有必需的文件都存在,则在循环后将返回true
还将返回现有文件的集合,因此您无需使用文件再次检查它。Exists
-只需检查集合的大小,如:
var files = Directory.EnumerateFiles(pathDirectory, names, SearchOption.AllDirectories);
if (!files.Any())
{
lblMessage.Text = "Missing file: " + names;
return false;
}
但这取决于您:)在最内部的循环中取出这两个返回语句
if (!File.Exists(fileNameToCheck))
{
lblMessage.Text = "Missing file: " + names;
return false;
}
else
{
return true;
}
不要返回,做些别的事情,然后在最后返回
因为,一旦返回,您将使用返回值退出该方法。在您的情况下,您还不想返回true,直到所有名称都被选中为止欢迎您。此外,如果/UploadFiles/下没有真正的目录,并且所有目录都在其中,那么您可以不枚举文件,而使用可读性更高的文件进行检查。Exists