Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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#_.net - Fatal编程技术网

我能打个“电话”吗;包括「;方法不区分大小写,使用C#?

我能打个“电话”吗;包括「;方法不区分大小写,使用C#?,c#,.net,C#,.net,我正在使用.NET4.5和C。如果拼写区分大小写,我下面的代码可以正常工作。换句话说,如果文件的拼写与“SetupV8.exe”完全相同。但我真的需要它不区分大小写。我玩过,但找不到办法 foreach (string file in directory.EnumerateFiles((AppDomain.CurrentDomain.BaseDirectory), "*.exe", SearchOption.AllDirectories)) { if (!file.C

我正在使用.NET4.5和C。如果拼写区分大小写,我下面的代码可以正常工作。换句话说,如果文件的拼写与“SetupV8.exe”完全相同。但我真的需要它不区分大小写。我玩过,但找不到办法

foreach (string file in directory.EnumerateFiles((AppDomain.CurrentDomain.BaseDirectory),  
         "*.exe", SearchOption.AllDirectories))
{
   if (!file.Contains("SetupV8.exe")
   {    
      // Do something
   }
}

谢谢

只需将字符串强制为所有小写即可进行比较

file.ToLower().Contains("setupv8.exe")

只需将字符串强制为所有小写即可进行比较

file.ToLower().Contains("setupv8.exe")
file.ToLower().Contains(“setupv8.exe”)
通常可以正常工作。(尽管你可能想考虑EnthsOffice)

另外,由于
EnumerateFiles
返回
FileInfo
,因此您不妨检查其
Name
属性:

foreach (FileInfo file in directory.EnumerateFiles((AppDomain.CurrentDomain.BaseDirectory),  
         "*.exe", SearchOption.AllDirectories))
{
   if (!file.Name.ToLower().Contains("setupv8.exe")
   {    
      // Do something with file
   }
}
另外,如果名称是“SetupV8.exe”,并且您不希望它以任何形式作为前缀/后缀,那么此时可以直接检查是否相等

编辑:也许更重要的是,您可能只想使用文件名。除非您想检查目录路径的任何部分是否匹配。也就是说,您可能不希望
c:\temp\setupv8.exe\u directory\subdirectory\setupv8.exe
匹配为假阳性

8年后为新读者编辑:在一些边缘情况下,使用
ToLower()
,因此可能最好改用。

file.ToLower().Contains(“setupv8.exe”)
通常可以正常工作。(尽管你可能想考虑EnthsOffice)

另外,由于
EnumerateFiles
返回
FileInfo
,因此您不妨检查其
Name
属性:

foreach (FileInfo file in directory.EnumerateFiles((AppDomain.CurrentDomain.BaseDirectory),  
         "*.exe", SearchOption.AllDirectories))
{
   if (!file.Name.ToLower().Contains("setupv8.exe")
   {    
      // Do something with file
   }
}
另外,如果名称是“SetupV8.exe”,并且您不希望它以任何形式作为前缀/后缀,那么此时可以直接检查是否相等

编辑:也许更重要的是,您可能只想使用文件名。除非您想检查目录路径的任何部分是否匹配。也就是说,您可能不希望
c:\temp\setupv8.exe\u directory\subdirectory\setupv8.exe
匹配为假阳性


8年后为新读者编辑:有些边缘情况下使用
ToLower()
,因此可能最好改用。

string.Contains只是string.IndexOf的包装,正如您从网络资源中看到的那样

public bool Contains(string value)
{
    return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}
并且string.IndexOf有一个适当的参数来忽略要搜索的字符串的大小写

 if (file.IndexOf("SetupV8.exe", StringComparison.OrdinalIgnoreCase) >= 0)
     // File found

string.Contains只是string.IndexOf的包装,正如您从网络资源中看到的那样

public bool Contains(string value)
{
    return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}
并且string.IndexOf有一个适当的参数来忽略要搜索的字符串的大小写

 if (file.IndexOf("SetupV8.exe", StringComparison.OrdinalIgnoreCase) >= 0)
     // File found

根据,您可以传入
StringComparison.OrdinalIgnoreCase
进行比较,而不考虑大小写

file.name.Contains("SetupV8.exe", StringComparison.OrdinalIgnoreCase)
这将更加有效,因为在这个过程中不创建两个可变字符串,而且在我看来,这比使用
.toLower()

<>强>但是你应该考虑一下你在这里检查什么,文件哈希会更好吗?如果假定文件内容是已知的,则可能会引入安全问题。

根据,您可以传入
StringComparison.OrdinalIgnoreCase
进行比较,而不考虑大小写

file.name.Contains("SetupV8.exe", StringComparison.OrdinalIgnoreCase)
这将更加有效,因为在这个过程中不创建两个可变字符串,而且在我看来,这比使用
.toLower()


<>强>但是你应该考虑一下你在这里检查什么,文件哈希会更好吗?如果假定文件的内容是已知的,则可能会引入安全问题。

只需创建一个扩展方法即可

public bool Contains(this string my,string his)
 {
      return my.ToLower().Contains(his.ToLower());
 }
用法


只要做一个扩展方法

public bool Contains(this string my,string his)
 {
      return my.ToLower().Contains(his.ToLower());
 }
用法


如果要比较包括扩展名但不包括目录的整个文件名:

file.Name.Equals(fileNameAndExt, StringComparison.OrdinalIgnoreCase)

file.FullName
还包括目录名
StringComparison.OrdinalIgnoreCase
是最快的比较方法,因为它不应用特定于培养基的处理。这是正确的方法,因为文件系统也不这样做。

如果要比较整个文件名,包括扩展名,但不包括目录:

file.Name.Equals(fileNameAndExt, StringComparison.OrdinalIgnoreCase)

file.FullName
还包括目录名
StringComparison.OrdinalIgnoreCase
是最快的比较方法,因为它不应用特定于培养基的处理。这是正确的方法,因为文件系统也不这样做。

file.ToLower().Contains(“setupv8.exe”)
通常工作正常。(尽管你可能想考虑<代码> EndsWith <代码>)哦,对皮特斯来说。那当然行。谢谢
file.ToLower()包含(“setupv8.exe”)
通常可以正常工作。(尽管你可能想考虑<代码> EndsWith <代码>)哦,对皮特斯来说。那当然行。谢谢谢谢我想我需要睡一会儿。谢谢。我想我需要一些睡眠。
String.Contains
是否有一个重载接受
StringComparison
String.Contains
是否有一个重载接受
StringComparison