这似乎是一个非常奇怪的问题,我无法弄清楚我的生活。我有一个如下所示的路径(字符串):
d:\发展\ PHP \ bchat \聊天\的index.php
我需要检查有问题的文件是否是PHP文件。我认为最合乎逻辑的方法是从一个子串开始。到字符串的末尾,看看是否== .php
所以我试过了:
bool isphp = (path.Substring(path.LastIndexOf('.')) == ".php") ? true : false;
这总是返回false。我想也许最后有一个尾随空间搞砸了我,所以我在路径上放了一个TrimEnd()。但这并没有改变任何事情。所以我试过这个:
bool isphp = (path.EndsWith(".php") == true) ? true : false;
这也总是返回false。
修改 我现在也尝试过这个:
bool isphp = (Path.GetExtension(path) == ".php");
但这也会返回false。
答案 0 :(得分:8)
使用Path-class。它有一个GetExtension()方法:
var path = @"D:\development\php\bchat\chat\index.php";
if( Path.GetExtension( path.ToUpperInvariant() ) == ".PHP" )
{}
编辑:添加了对大/小案例的检查
答案 1 :(得分:3)
以下代码在我的机器上正常工作:
public static void Main()
{
string path = @"D:\development\php\bchat\chat\index.php";
bool isPhp = path.EndsWith(".php");
Console.WriteLine(isPhp);
}
所以我猜你的字符串还有其它东西导致它无法正常工作。也许这是一个案例,在这种情况下,将StringComparison.InvariantCultureIgnoreCase添加到您的EndsWith调用中。
public static void Main()
{
string path = @"D:\development\php\bchat\chat\index.pHp";
bool isPhp = path.EndsWith(".php", StringComparison.OrdinalIgnoreCase);
Console.WriteLine(isPhp);
}
如果不起作用,请在比较行上设置一个断点,然后在立即窗口中输入:
path[path.Length-1]
你应该得到这个结果:
112 'p'
如果不这样做,您可以确定您的路径不以标准p字符结尾。
答案 2 :(得分:2)
如果它是现有文件,您可以获取它的FileInfo对象并以这种方式检查扩展名:
FileInfo fi = new FileInfo(@"D:\development\php\bchat\chat\index.php");
if (fi.Exists && fi.Extension == ".php")
{
//Do something
}
或者我想你可能是一只羊,跟随人群并使用其他人建议的更好的Path.GetExtension方法。但首先问问自己这个问题 - 你想以最干净,最快速和最好的方式做到这一点,还是你想要坚持自己的个性并让我走上最阻力的道路?
答案 3 :(得分:2)
只是发布解决方案的示例:
bool isphp = Path.GetExtension(path)
.Equals(".php", StringComparison.InvariantCultureIgnoreCase);
答案 4 :(得分:1)
使用Path.GetExtension并与您要查找的文件类型进行比较。
答案 5 :(得分:1)
答案 6 :(得分:1)
更新:
检查path.Substring(path.LastIndexOf('.')
实际返回的内容 - 这可能会指向正确的方向。
答案 7 :(得分:1)
确保大写/小写没有区别。你只是测试小写的“php”。
string ext = Path.GetExtension(path);
bool isPhp = (ext.Equals(".php", StringComparison.InvariantCultureIgnoreCase));
答案 8 :(得分:1)
private static bool IsPhp(string fileName)
{
return string.Compare(Path.GetExtension(fileName), ".php",
StringComparison.OrdinalIgnoreCase) == 0;
}
答案 9 :(得分:1)
我怀疑你的字符串中有一些“奇怪的”。我建议你详细丢弃你的字符串,如下所示:
foreach (char c in path)
{
Console.WriteLine("'{0}' U+{1:x4}", c, (int) c);
}
这样你就会看到任何意外的角色,例如: unicode char 0s在“真实”字符之间。