c# - 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;
}
解决方案
您的代码将如下所示:
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() 方法中使用的类内部会发生什么。
推荐阅读
- python - 在Python中解码某个bin文件
- swift - 如何修复 NSBezierPath 的便利 init w/closure Extension 以使用在 Swift 5.0 中失败的 CGPath?
- python - python read from text file line by line
- google-app-engine - 原生模式下的 Google Cloud Firestore 和 Recaptcha v3
- python - GoogleColab 中没有名为“config”的模块和没有名为“model”的模块
- javascript - limiting checkbox checks via jquery or javascript
- types - 如何修复“隐式返回'()',因为它的主体没有尾巴或'return'表达式?
- r - Apply a match function to add a column to a list of named dataframes
- sql - 在 SQLite 中选择查询重复记录
- c# - 将数据插入作为主键外键一部分的表中 - 实体框架