2016-04-25 4 views
0

ich eine WPF-Anwendung entwickle, ich versuche, Dateien raubend große Speicher in der system.I erhalten möchten die folgenden programmatisch erreichen:Windows Search mit C# WPF programmatisch

offene Fenster Suche, Typ Größe: gigantisch erhalten, die in der Anmeldung aufgeführten Dateien

enter image description here

ich den Code unten versucht:

public void GetFiles() 
     { 
      string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\""; 
      OleDbConnection connection = new OleDbConnection(connectionString); 

      string query = @"SELECT System.ItemName FROM SystemIndex " + 
       @"WHERE scope ='file:" + @"C:\" + "' and FREETEXT('size:gigantic')"; 
      OleDbCommand command = new OleDbCommand(query, connection); 
      connection.Open(); 

      List<string> result = new List<string>(); 

      OleDbDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       result.Add(reader.GetString(0)); 
      } 

      connection.Close(); 
     } 
+2

Was suchen Sie Ist dieser Code gibt einen Fehler entdeckt? Was ist passiert, als Sie diesen Code ausgeführt haben? Bitte klären.;) – Tushar

+0

Ich vermute, Sie bekommen keine Ergebnisse, weil es versucht, nach Text zu suchen "Größe: gigantische" anstatt gegen Größe für größere als ... – BugFinder

+0

@TusharGupta: Ich bekomme 0 Ergebnisse gefunden – Apoorv

Antwort

0

Ich denke, das Problem ist die gigantic Definition Sie verwenden. Sie müssen definieren, was Sie in Ihrer Anwendung gigantic betrachten. Der folgende Code funktioniert, so ändern, nur die Größe für das, was man bedenkt, gigantic:

public void GetFiles() 
    { 
     string connectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\""; 
     OleDbConnection connection = new OleDbConnection(connectionString);string query = @"SELECT System.ItemName FROM SystemIndex " + 
      @"WHERE scope ='file:" + @"C:\" + "' and size>5000000"; 
OleDbCommand command = new OleDbCommand(query, connection); 
     connection.Open(); 

     List<string> result = new List<string>(); 

     OleDbDataReader reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      result.Add(reader.GetString(0)); 
     } 

     connection.Close(); 
    } 
+0

Wie kann ich Dateien vom Typ PDF filtern und wie kann ich mehrere Dateitypen wie mp4, mkv, wmv filtern. mit Einzelabfrage? Kannst du mir bitte die Anfrage stellen? – Apoorv

+0

Sie können 'LIKE' verwenden, zum Beispiel so etwas wie' string query = @ "SELECT System.ItemName FROM SystemIndex" + @ "WHERE scope = 'file:" + @ "C: \" + "' und size> 5000 und System.ItemName wie ANY ARRAY ['%. jpg', '%. wmv'] ";' Dies würde alle 'jpg'- und' wmv'-Dateien zurückgeben. Anyway, Sie können all dies [hier (MSDN)] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb231256 (v = vs.85) .aspx) – Pikoh

+0

diese Abfrage gibt mir zurück keine Ergebnisse, bitte geben Sie eine funktionierende Anfrage an – Apoorv

0

Es ist besser, diese Lib Win API CodePack zu verwenden. Es gibt einen Shell-Namespace, der alle nützlichen Methoden für die Verwendung der Shell-Suche enthält, wie sie Windows Explorer verwendet. Falls Sie das WinRT-Subsystem für Win8.1 oder höher verwenden, können Sie im Windows.Storage.Search-Namespace nach geeigneten Methoden für Sie suchen.

In Fall werden Sie CodePack müssen verwenden Sie informieren, dass Sie Suchabfragen ausführen können nur auf STA-Thread (da es COM ist), so planen Sie Ihre Architektur entsprechend

+0

Ich suche nach Windows 8 und höher und eine nicht WinRT API, wie ich es für WPF Anwendung verwende, bitte helfen! – Apoorv

+0

Dann ist WinApi CodePack Ihre Wahl. Schauen Sie in ShellSearch- und ShellSearchCondition-Klassen nach. – VitaliyK

Verwandte Themen