我能打个“电话”吗;包括「;方法不区分大小写,使用C#?
我正在使用.NET4.5和C。如果拼写区分大小写,我下面的代码可以正常工作。换句话说,如果文件的拼写与“SetupV8.exe”完全相同。但我真的需要它不区分大小写。我玩过,但找不到办法我能打个“电话”吗;包括「;方法不区分大小写,使用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
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
?