/// <summary> /// Searches the specified key word and reset the everything API afterwards /// </summary> /// <param name="keyWord">The key word.</param> /// <param name="token">when cancelled the current search will stop and exit (and would not reset)</param> /// <param name="offset">The offset.</param> /// <param name="maxCount">The max count.</param> /// <returns></returns> public List <SearchResult> Search(string keyWord, CancellationToken token, int maxCount, int offset = 0) { if (string.IsNullOrEmpty(keyWord)) { throw new ArgumentNullException(nameof(keyWord)); } if (offset < 0) { throw new ArgumentOutOfRangeException(nameof(offset)); } if (maxCount < 0) { throw new ArgumentOutOfRangeException(nameof(maxCount)); } lock (_syncObject) { if (keyWord.StartsWith("@")) { EverythingApiDllImport.Everything_SetRegex(true); keyWord = keyWord.Substring(1); } EverythingApiDllImport.Everything_SetSearchW(keyWord); EverythingApiDllImport.Everything_SetOffset(offset); EverythingApiDllImport.Everything_SetMax(maxCount); if (token.IsCancellationRequested) { return(null); } if (!EverythingApiDllImport.Everything_QueryW(true)) { CheckAndThrowExceptionOnError(); return(null); } var results = new List <SearchResult>(); for (int idx = 0; idx < EverythingApiDllImport.Everything_GetNumResults(); ++idx) { if (token.IsCancellationRequested) { return(null); } EverythingApiDllImport.Everything_GetResultFullPathNameW(idx, _buffer, BufferSize); var result = new SearchResult { FullPath = _buffer.ToString() }; if (EverythingApiDllImport.Everything_IsFolderResult(idx)) { result.Type = ResultType.Folder; } else if (EverythingApiDllImport.Everything_IsFileResult(idx)) { result.Type = ResultType.File; } results.Add(result); } Reset(); return(results); } }
/// <summary> /// Searches the specified key word and reset the everything API afterwards /// </summary> /// <param name="keyWord">The key word.</param> /// <param name="token">when cancelled the current search will stop and exit (and would not reset)</param> /// <param name="offset">The offset.</param> /// <param name="maxCount">The max count.</param> /// <returns></returns> public List <SearchResult> Search(string keyWord, CancellationToken token, int maxCount) { var results = new List <SearchResult>(); if (string.IsNullOrEmpty(keyWord)) { throw new ArgumentNullException(nameof(keyWord)); } if (maxCount < 0) { throw new ArgumentOutOfRangeException(nameof(maxCount)); } if (token.IsCancellationRequested) { return(results); } if (keyWord.StartsWith("@")) { EverythingApiDllImport.Everything_SetRegex(true); keyWord = keyWord.Substring(1); } else { EverythingApiDllImport.Everything_SetRegex(false); } if (token.IsCancellationRequested) { return(results); } EverythingApiDllImport.Everything_SetRequestFlags(RequestFlag.HighlightedFileName | RequestFlag.HighlightedFullPathAndFileName); if (token.IsCancellationRequested) { return(results); } EverythingApiDllImport.Everything_SetOffset(0); if (token.IsCancellationRequested) { return(results); } EverythingApiDllImport.Everything_SetMax(maxCount); if (token.IsCancellationRequested) { return(results); } EverythingApiDllImport.Everything_SetSearchW(keyWord); if (token.IsCancellationRequested) { return(results); } if (!EverythingApiDllImport.Everything_QueryW(true)) { CheckAndThrowExceptionOnError(); return(results); } if (token.IsCancellationRequested) { return(results); } int count = EverythingApiDllImport.Everything_GetNumResults(); for (int idx = 0; idx < count; ++idx) { if (token.IsCancellationRequested) { return(results); } // https://www.voidtools.com/forum/viewtopic.php?t=8169 string fileNameHighted = Marshal.PtrToStringUni(EverythingApiDllImport.Everything_GetResultHighlightedFileNameW(idx)); string fullPathHighted = Marshal.PtrToStringUni(EverythingApiDllImport.Everything_GetResultHighlightedFullPathAndFileNameW(idx)); if (fileNameHighted == null | fullPathHighted == null) { CheckAndThrowExceptionOnError(); } if (token.IsCancellationRequested) { return(results); } ConvertHightlightFormat(fileNameHighted, out List <int> fileNameHightlightData, out string fileName); if (token.IsCancellationRequested) { return(results); } ConvertHightlightFormat(fullPathHighted, out List <int> fullPathHightlightData, out string fullPath); var result = new SearchResult { FileName = fileName, FileNameHightData = fileNameHightlightData, FullPath = fullPath, FullPathHightData = fullPathHightlightData, }; if (token.IsCancellationRequested) { return(results); } if (EverythingApiDllImport.Everything_IsFolderResult(idx)) { result.Type = ResultType.Folder; } else { result.Type = ResultType.File; } results.Add(result); } return(results); }