funllname="D:\EBILL\HTML\201011\20101101\[email protected](J-17-039336-4)2010年10月電子帳單[表D]_ok.pdf "
strFname = "[email protected]";
if (file.FullName.ToLower().IndexOf(strFname) != -1)
{
   strFiler = file.FullName;
   
 }
上面这种情况用strFname这个变量进去是可以的。。但是当变成下面那种情况就不能进去了
funllname="D:\EBILL\HTML\201011\20101101\[email protected](J-17-039336-4)2010年10月電子帳單[表D]_ok.pdf "
strFname = "[email protected]";
if (file.FullName.ToLower().IndexOf(strFname) != -1)
{
   strFiler = file.FullName;
   
 }
注意看那个strFname中那个邮箱的值,我把值中加入了-这个字符,结果就找不到了,IndexOf中特殊字符,比如()、[]、-這個几个字符都无法找到。。这边恳求哪位高手帮忙下!謝謝啊

解决方案 »

  1.   

    可以这样if( System.Text.RegularExpressions.Regex.IsMatch(funllname,strFname)){;}
      

  2.   

    不会啊。你代码里的file是FileInfo吗?
    string funllname = @"D:\EBILL\HTML\201011\20101101\[email protected](J-17-039336-4)2010年10月電子帳單[表D]_ok.pdf ";
                string strFname = "[email protected]";
                if (funllname.Contains(strFname))
                    Console.WriteLine("True");
                else
                    Console.WriteLine("False");
                //Output: True            if (funllname.IndexOf(strFname) > -1)
                    Console.WriteLine("True");
                else
                    Console.WriteLine("False");
                //Output: True
      

  3.   

    估计笔误。
    funllname.IndexOf不会有问题。估计你funllname和file.FullName存储的不同。
      

  4.   

    不会啊。你代码里的file是FileInfo吗?(2樓)
    是fileinfo的
    付下代码这边
    strFname=“[email protected](J-17-039336-4)2010年10月電子帳單[表D]”;                                for (int j = 1; j <= 31; j++)
                                    {
                                        string dayFolder = strSaveFolder + strFileYY + strFileMM + j.ToString().PadLeft(2, '0') + @"\";                                    if (System.IO.Directory.Exists(dayFolder))
                                        {
                                            DirectoryInfo dir = new DirectoryInfo(dayFolder);
                                            FileInfo[] files = dir.GetFiles("*.pdf");
                                            foreach (FileInfo file in files)
                                            {
                                                if (file.FullName.ToLower().IndexOf("_no.pdf") == -1 )  //已發送成功的,之前發送且失敗的不再發
                                                {
                                                    //strFname = "[email protected]";
                                                    if (file.FullName.ToLower().IndexOf(strFname) != -1)
                                                    {
                                                        strFiler = file.FullName;
                                                        //strFiler = strSaveFolder + @"\" + strFname;
                                                    }
                                                }
                                          
                                            }
                                        }
                                    }
      

  5.   

    晕,那你查的也不是 [email protected] 呀。
    你查的不是:[email protected](J-17-039336-4)2010年10月電子帳單[表D] 么strFname=“[email protected](J-17-039336-4)2010年10月電子帳單[表D]”;
      

  6.   

    debug一下,看看files里都有哪些。
      

  7.   

    //strFname = "[email protected]";
    这个我注解掉啦,不是这个啊。。恩,因为里面有太多的特殊符号,我只是简单截取里面一部分的字符,加进去特殊字符而已。为了看能不能测试过,结果都是-1的值。
      

  8.   

    这样把 file.FullName.ToLower() 都用Console.WriteLine 输出一下。如果你用VS调试把Output View打开。看看 file.FullName.ToLower() 都是什么。
      

  9.   

    funllname=@"D:\EBILL\HTML\201011\20101101\[email protected](J-17-039336-4)2010年10月電子帳單[表D]_ok.pdf ";
      

  10.   

     file.FullName就是11楼说的那样
    原来是要实现这样的[email protected](J-17-039336-4)2010年10月電子帳單[表D]_ok.pdf这个档案可以在
    D:\EBILL\HTML\201011\20101101\[email protected](J-17-039336-4)2010年10月電子帳單[表D]_ok.pdf
    这个路径下找到对应的文档,但是找不到,验证后是特殊字符的原因,所以我才把[email protected](J-17-039336-4)2010年10月電子帳單[表D]这几个字符分段测试,之前提出的是单单针对email的。所以只是简单举个例子而已。让你们误解了,不好意思!
      

  11.   

    IndexOf 不会出问题的,只是你的查询源里面的内容到底是否正确,需要你自己debug一下。