C#如何根据文件名的对象检查文件是否在文件夹中

C#如何根据文件名的对象检查文件是否在文件夹中,c#,C#,我有以下方法: public static Boolean CheckContents(string ExportDirectory, string FileName, string DspFleName, String RteFleName, string FulRteName, string EqpFleName, int CompanyId, string CompanyName) { if (DspFleName != "None") {

我有以下方法:

public static Boolean CheckContents(string ExportDirectory, string FileName, string DspFleName, String RteFleName, string FulRteName, string EqpFleName, int CompanyId, string CompanyName)
    {

        if (DspFleName != "None")
        {

           IList<string> DspFle= DspFleName.Split(',');
           IList<string> ActualFiles = Directory.GetFiles(ExportDirectory);
            for (int i = 0; i < DspFle.Count; i++)
            {
                if (DspFle[i] != ActualFiles[i])
                {
                    return false;
                }
            }
        }
        return true;
    }
}
然后,它将获取从“ExportDirectory”指定的目录中的acutal文件,并将这些文件返回到IList中

我这里有两个问题: 1.Directory.GetFiles返回整个文件路径,因此将始终返回false。我还尝试了Path.GetFileNames,它只返回文件名,但不返回扩展名

2.我需要将整个DspFle与实际文件IList进行比较,因为文件名可能位于列表的不同部分

有什么想法吗?

列出文件名=新建列表();
 List<String> fileNames = new List<String>();
 String[] files = Directory.GetFiles(".");
 foreach (String file in files)
 {
       fileNames.Add(System.IO.Path.GetFileName(file));
 }
String[]files=Directory.GetFiles(“.”); foreach(文件中的字符串文件) { Add(System.IO.Path.GetFileName(文件)); } 这将返回带有扩展名的文件名。然后,您可以在该点与IList进行比较。

List fileNames=new List();
String[]files=Directory.GetFiles(“.”);
foreach(文件中的字符串文件)
{
Add(System.IO.Path.GetFileName(文件));
}

这将返回带有扩展名的文件名。然后,您可以在该点与IList进行比较。

既然可以检查目录中是否存在每个文件,为什么还要费劲地构建两个列表呢?实际上,这就是您的代码正在做的事情

 foreach(string DspFle in DspFleName.Split(',')) {  
       string CheckPath = Path.Combine(ExportDirectory,DspFle[i]);
       if (!File.Exists(CheckPath)) return false;  
 }

 return true;

既然可以检查目录中是否存在每个文件,为什么还要费劲地构建两个列表呢?实际上,这就是您的代码正在做的事情

 foreach(string DspFle in DspFleName.Split(',')) {  
       string CheckPath = Path.Combine(ExportDirectory,DspFle[i]);
       if (!File.Exists(CheckPath)) return false;  
 }

 return true;

您的代码不仅希望文件存在,而且希望文件处于相同的位置

试试这个:

    public static Boolean CheckContents(string ExportDirectory, string DspFleName)
    {
        if (DspFleName == "None")
            return true;

        var DspFle = DspFleName.Split(',');
        var ActualFiles = Directory.GetFiles(ExportDirectory);

        foreach(var file in DspFle)
            if (!ActualFiles.Any(x=>Path.GetFileName(x).Equals(file)))
                return false;

        return true;
    }

您的代码不仅希望文件存在,而且希望文件处于相同的位置

试试这个:

    public static Boolean CheckContents(string ExportDirectory, string DspFleName)
    {
        if (DspFleName == "None")
            return true;

        var DspFle = DspFleName.Split(',');
        var ActualFiles = Directory.GetFiles(ExportDirectory);

        foreach(var file in DspFle)
            if (!ActualFiles.Any(x=>Path.GetFileName(x).Equals(file)))
                return false;

        return true;
    }

也许这就是你想要的

        if (DspFle == "None")
            return true;

        List<string> DspFle = DspFleName.Split(',');
        List<string> ActualFiles = new List<string>();

        foreach (string file in Directory.GetFiles(ExportDirectory)
        {
            DirectoryInfo di = new DirectoryInfo(file);
            ActualFiles.Add(di.Name);            
        }

        foreach (string file in DspFle)
        {
            if (!ActualFiles.Contains(dspFile))
                return false;
        }

        return true;
if(DspFle==“无”)
返回true;
List DspFle=DspFleName.Split(',');
列表实际文件=新列表();
foreach(Directory.GetFiles(ExportDirectory)中的字符串文件)
{
DirectoryInfo di=新的DirectoryInfo(文件);
实际文件。添加(di.名称);
}
foreach(DspFle中的字符串文件)
{
如果(!ActualFiles.Contains(dspFile))
返回false;
}
返回true;

DirectoryInfo将允许您返回包含扩展名的文件名。

也许这就是您想要的

        if (DspFle == "None")
            return true;

        List<string> DspFle = DspFleName.Split(',');
        List<string> ActualFiles = new List<string>();

        foreach (string file in Directory.GetFiles(ExportDirectory)
        {
            DirectoryInfo di = new DirectoryInfo(file);
            ActualFiles.Add(di.Name);            
        }

        foreach (string file in DspFle)
        {
            if (!ActualFiles.Contains(dspFile))
                return false;
        }

        return true;
if(DspFle==“无”)
返回true;
List DspFle=DspFleName.Split(',');
列表实际文件=新列表();
foreach(Directory.GetFiles(ExportDirectory)中的字符串文件)
{
DirectoryInfo di=新的DirectoryInfo(文件);
实际文件。添加(di.名称);
}
foreach(DspFle中的字符串文件)
{
如果(!ActualFiles.Contains(dspFile))
返回false;
}
返回true;

DirectoryInfo将允许您返回包含扩展名的文件名。

我认为您应该再添加几个参数:)该方法有更多内容,但我只是想结束它,这样它就不会脱离问题的上下文。在这种情况下,该方法可能应该少一些(即,将其分解为更小的方法)我认为你应该再加上几个参数:)这个方法还有很多,但我只是想结束它,这样它就不会脱离问题的上下文。在这种情况下,这个方法可能应该少一些(例如,把它分解成更小的方法)。他已经在原始代码中得到了目录中所有文件的列表,包括那些不在他的清单上的。不知道为什么这会涉及更多的IO。他已经在原始代码中获得了目录中所有文件的列表,包括那些不在他的检查列表中的文件。不确定这将涉及更多IO的原因。@user380432:这是Lambda表达式,自.NET 3.5以来一直使用,以避免必须键入变量类型。大多数程序员发现它使用起来更简单、更直观。@user380432:这是Lambda表达式,从.NET 3.5开始使用,以避免必须键入变量类型。大多数程序员发现它使用起来更简单、更直观。