首页 > 解决方案 > C#:添加新检查而不影响现有检查

问题描述

我希望我能尽我所能解释我的情况。

我有代码,当单击“加载”按钮时,位于预定义网络目录路径中的所有文件名(如果有)都被加载到文本区域。

目前可以有 .txt、.xml 文件。

内容可能如下所示:

first_file_found.xml
second_file_found.xml
third_file_found.txt

此外,在代码中还有另一个函数“isCoValid”,它根据该函数的返回值(真/假)对这些文件的内容进行附加验证,启用“处理”按钮:

if (IsFlatFile(fileName) || IsXMLFile(fileName)) 
{
    if (isCoValid(fileName))
    {
        btnProcess.Enabled = true;
    }
    else
    {
        btnProcess.Enabled = false;
        break;
    }
}

现在我必须添加一个 .csv 文件类型,但执行 isCoValid 函数不需要此文件。

文本区域内容现在如下所示:

first_file_found.xml
second_file_found.xml
third_file_found.txt
fourht_file_found.csv

我的帮助请求是询问如何检查是否有 CSV 文件可以完成,并控制“处理”按钮的启用,但仍然尊重现有的 .txt 和 .xml 检查和内容验证?

我可能有无效的 xml 和文本文件,但我仍然需要能够处理 .csv。文件。

我确实是这样改的:

if (IsFlatFile(fileName) || IsXMLFile(fileName)) 
{
    if (isCoValid(fileName))
    {
        btnProcess.Enabled = true;
    }
    else
    {
        btnProcess.Enabled = false;
        break;
    }
}

if (IsCSVFile(fileName))
{
    btnProcess.Enabled = true;
}

但我确信这是不正确的,如果可能的话,我想寻求一些帮助。

我希望我能以一些清晰和直截了当的方式解释我的问题,如果没有,请告诉我,我可以尝试提供更多信息。

谢谢你,伊拉斯莫

要求附加代码

public bool IsFlatFile(string FileName)
    bool ReturnValue = false;

    if (FileName.ToUpper().Right(4) == ".TXT")         
    {
        if ((FileName.Substring(0, 2).ToUpper() == "MN") ||
            (FileName.Substring(0, 2).ToUpper() == "CH"))

        {
            ReturnValue = true;
        }
    }
    return ReturnValue;
}

public bool IsXMLFile(string FileName)
    bool ReturnValue = false;

    if (FileName.ToUpper().Right(4) == ".XML")         
    {
        if ((FileName.Substring(0, 2).ToUpper() == "TR") ||
            (FileName.Substring(0, 2).ToUpper() == "SK"))

        {
            ReturnValue = true;
        }
    }
    return ReturnValue;
}

protected bool isCoValid(string fName)
{
    bool retCode = false;
    Parameters parms;
    var reader = new AppSettingsReader();
    Application app = new Application();
    Package package = null;

    try
    {
        package = app.LoadPackage(packagePath + "ValidateContents.dtsx", null);
        parms = package.Parameters;
        parms["ID"].Value = "";
        parms["ImportFileName"].Value = fName;
        parms["UserID"].Value = userName;
        
        DTSExecResult results = package.Execute();
        if (results == Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure)
        {
            foreach (Microsoft.SqlServer.Dts.Runtime.DtsError local_DtsError in package.Errors)
            {
                retCode = false;
                resultText = resultText + "DTSX Package Execution results: " + local_DtsError.Description.ToString() + Environment.NewLine;
            }
        }
        else
        {
            resultText = resultText + "Successful Process Completion." + Environment.NewLine + Environment.NewLine;
            string sqlStr = "SELECT TOP 1 * FROM Validation WHERE Type = 'VALCO' AND CAST(CreatedDate AS DATE) = CAST(GETDATE() AS DATE)";
            
            DataTable dt = new DataTable();
            dt = GetDataSet(sqlStr);

            if (dt.Rows.Count > 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    if (row["Status"].ToString() == "Valid")
                    {
                        retCode = true;
                        resultText = "Output: Valid" + Environment.NewLine + "Press the 'Process' button to proceed.";
                    }
                    else
                    {
                        retCode = false;
                        resultText = "Output: " + row["Status"].ToString() + Environment.NewLine + "Validation Fail: " + row["Error"].ToString();
                    }
                }
            }
            else
            {
                resultText = "Unable to read Validation Table for this file.";
                retCode = false;
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
    return retCode;
}

标签: c#asp.net

解决方案


您的代码将如下所示:

if (IsFlatFile(fileName) || IsXMLFile(fileName) || IsCSVFile(fileName))
{
    btnProcess.Enabled = isCoValid(fileName);
                
    if (!btnProcess.Enabled) break;
}

public static bool IsCSVFile(string FileName) =>
    Path.GetExtension(FileName).Equals(".csv", StringComparison.OrdinalIgnoreCase);

当您编写自己的 IsCSVFile() 方法并更新 isCoValid() 方法以满足您的需求时。

抱歉,但我无法猜测 isCoValid() 方法中使用的类内部会发生什么。


推荐阅读