Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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# 为什么在文件中搜索第i'行中的特定文本;我得到了奇怪的结果?_C#_.net_Winforms - Fatal编程技术网

C# 为什么在文件中搜索第i'行中的特定文本;我得到了奇怪的结果?

C# 为什么在文件中搜索第i'行中的特定文本;我得到了奇怪的结果?,c#,.net,winforms,C#,.net,Winforms,在后台工作人员嫁妆活动中 string CurrentFileWithPath; private void _FileProcessingWorker_DoWork(object sender, DoWorkEventArgs e) { try { object[] CurrentStatus = new object[5]; DirectoryInfo

在后台工作人员嫁妆活动中

string CurrentFileWithPath;
        private void _FileProcessingWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                object[] CurrentStatus = new object[5];
                DirectoryInfo[] MySubDirectories = (DirectoryInfo[])e.Argument;
                for (int i = 0; i < MySubDirectories.GetLength(0); i++)
                {
                    DirectoryInfo MySubDirectory = MySubDirectories[i];

                    List<FileInfo> l = new List<FileInfo>();
                    CountFiles(MySubDirectory, l);

                    int totalFiles = l.Count;

                    CurrentStatus[3] = i.ToString();
                    CurrentStatus[4] = totalFiles.ToString();
                    _FileProcessingWorker.ReportProgress(0, CurrentStatus);

                    string CurrentDirectory = "Current Directory: " + MySubDirectory.Name;

                    foreach (FileInfo MyFile in l)
                    {
                        if (_FileProcessingWorker.CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        if (MyFile.Extension.ToLower() == ".cs" || MyFile.Extension.ToLower() == ".vb")
                        {
                            string CurrentFile = "Current File: " + MyFile.Name;
                            string CurrentFileWithPath = MyFile.FullName;

                            CurrentStatus[0] = CurrentDirectory;
                            CurrentStatus[1] = CurrentFile;
                            _FileProcessingWorker.ReportProgress(0, CurrentStatus);

                            List<string> Result = SearchInFile(CurrentFileWithPath, "static class FileShellExtension");

                            if (Result != null && Result.Count > 0)
                            {
                                CurrentStatus[2] = Result;
                                _FileProcessingWorker.ReportProgress(0, CurrentStatus);
                            }
                        }
                    }
                }
            }
            catch (Exception err)
            {
                return;
            }
       }
字符串CurrentFileWithPath;
私有void\u文件处理worker\u DoWork(对象发送方,DoWorkEventArgs e)
{
尝试
{
对象[]当前状态=新对象[5];
DirectoryInfo[]MySubDirectories=(DirectoryInfo[])e.Argument;
for(int i=0;i0)
{
当前状态[2]=结果;
_FileProcessingWorker.ReportProgress(0,当前状态);
}
}
}
}
}
捕获(异常错误)
{
返回;
}
}
然后是CountFiles方法

private void CountFiles(DirectoryInfo di, List<FileInfo> l)
        {
            try
            {
                l.AddRange(di.EnumerateFiles());
            }
            catch
            {
                string fff = "";
            }

            try
            {
                IEnumerable<DirectoryInfo> subDirs = di.EnumerateDirectories();
                if (subDirs.Count() > 0)
                {
                    foreach (DirectoryInfo dir in subDirs)
                        CountFiles(dir, l);
                }
            }
            catch 
            {
                string yyy = "";
            }
        }
private void CountFiles(目录信息di,列表l)
{
尝试
{
l、 AddRange(di.EnumerateFiles());
}
抓住
{
字符串fff=“”;
}
尝试
{
IEnumerable subDirs=di.EnumerateDirectory();
如果(subDirs.Count()>0)
{
foreach(子目录中的目录信息目录)
CountFiles(dir,l);
}
}
抓住
{
字符串yyy=“”;
}
}
backgroundworker progresschanged事件

private void _FileProcessingWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (typeof(object[]) == e.UserState.GetType())
            {
                object[] StatusMsg = (object[])e.UserState;
                if (5 == StatusMsg.GetLength(0))
                {
                    label2.Text = StatusMsg[4].ToString();
                    label4.Text = StatusMsg[3].ToString();

                    if (StatusMsg[0] != null && StatusMsg[1] != null)
                    {
                        lblCurrentDirectory.Text = StatusMsg[0].ToString();
                        lblStatus.Text = StatusMsg[1].ToString();
                    }
                    if (StatusMsg[2] != null)
                    {
                        if (StatusMsg[2].GetType() == typeof(List<string>))
                        {
                            List<string> l = (List<string>)StatusMsg[2];

                            for (int i = 0; i < l.Count; i++)
                            {
                                ListViewCostumControl.lvnf.Items.Add("Directory: " + lblCurrentDirectory.Text + "In File: " + lblStatus.Text + l[i]);
                                w.WriteLine("Directory: " + lblCurrentDirectory.Text + "In File: " + lblStatus.Text + l[i]);
                            }
                        }
                    }
                }
            }
        }
private void\u FileProcessingWorker\u ProgressChanged(对象发送方,progresschangedventargs e)
{
if(typeof(object[])==e.UserState.GetType()
{
object[]StatusMsg=(object[])e.UserState;
如果(5==StatusMsg.GetLength(0))
{
label2.Text=StatusMsg[4].ToString();
label4.Text=StatusMsg[3].ToString();
if(StatusMsg[0]!=null&&StatusMsg[1]!=null)
{
lblCurrentDirectory.Text=StatusMsg[0].ToString();
lblStatus.Text=StatusMsg[1].ToString();
}
如果(StatusMsg[2]!=null)
{
if(StatusMsg[2].GetType()==typeof(列表))
{
列表l=(列表)状态消息[2];
对于(int i=0;i
最后一个方法是searchInfilles,我在每行的每个.cs文件中搜索匹配项:

private List<string> SearchInFile(string fileToSearch, string textToSearch)
        {
            List<string> l = new List<string>();
            try
            {
                foreach (var line in File.ReadAllLines(fileToSearch))
                {
                    if (line.Contains(textToSearch))
                        l.Add(line);
                }
            }
            catch(Exception err)
            {
                string fff = err.ToString();
            }

            return l;
        }
private List SearchInFile(字符串fileToSearch,字符串textToSearch)
{
列表l=新列表();
尝试
{
foreach(File.ReadAllLines(fileToSearch)中的var行)
{
if(line.Contains(textToSearch))
l、 添加(行);
}
}
捕获(异常错误)
{
字符串fff=err.ToString();
}
返回l;
}
在本例中,我正在搜索字符串:“静态类FileShellExtension”

List Result=SearchInFile(CurrentFileWithPath,“静态类FileShellExtension”);
我还将结果写入一个文本文件。 我知道“静态类FileShellExtension”存在于一两个文件中。 但是当我做搜索的时候,我得到了太多的结果,其中很多是相同的,很多不是逻辑的,我得到的结果是在根本不存在的文件中

这是我将其写入的文本文件的部分结果:

目录:当前目录:ShellContextMenuIn文件:当前文件:Program.cs静态类文件HellExtension 目录:当前目录:ShellContextMenuIn文件:当前文件:Settings.Designer.cs静态类文件HellExtension 目录:当前目录:ShellContextMenuIn文件:当前文件:Settings.Designer.cs静态类文件HellExtension 目录:当前目录
List<string> Result = SearchInFile(CurrentFileWithPath, "static class FileShellExtension");