Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环映射文件夹中的现有文件_C# - Fatal编程技术网

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