检查字符串结尾的问题

时间:2009-05-15 09:01:02

标签: c# string

这似乎是一个非常奇怪的问题,我无法弄清楚我的生活。我有一个如下所示的路径(字符串):

  

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。

10 个答案:

答案 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)

Path.GetExtension方法呢?

答案 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在“真实”字符之间。