From db3f066b7316bee368115f21ac5428301ddfe6a5 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 17 Jul 2009 11:33:05 +0000 Subject: [PATCH] Fixed SD2-893 - Searching text in a directory with no access permissions throws exception git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4460 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Engine/SearchReplaceManager.cs | 6 ++- .../Src/Services/FileUtility/FileUtility.cs | 41 +++++++++++-------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceManager.cs b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceManager.cs index a1014bfd05..d0f2169df1 100644 --- a/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceManager.cs +++ b/src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchReplaceManager.cs @@ -171,7 +171,8 @@ namespace SearchAndReplace ShowNotFoundMessage(monitor); } else { if (monitor != null) monitor.ShowingDialog = true; - MessageService.ShowMessage("${res:ICSharpCode.TextEditor.Document.SearchReplaceManager.MarkAllDone}", "${res:Global.FinishedCaptionText}"); + MessageService.ShowMessage(StringParser.Parse("${res:ICSharpCode.TextEditor.Document.SearchReplaceManager.MarkAllDone}", new string[,]{{ "Count", count.ToString() }}), + "${res:Global.FinishedCaptionText}"); if (monitor != null) monitor.ShowingDialog = false; } } @@ -182,7 +183,8 @@ namespace SearchAndReplace ShowNotFoundMessage(monitor); } else { if (monitor != null) monitor.ShowingDialog = true; - MessageService.ShowMessage("${res:ICSharpCode.TextEditor.Document.SearchReplaceManager.ReplaceAllDone}", "${res:Global.FinishedCaptionText}"); + MessageService.ShowMessage(StringParser.Parse("${res:ICSharpCode.TextEditor.Document.SearchReplaceManager.ReplaceAllDone}", new string[,]{{ "Count", count.ToString() }}), + "${res:Global.FinishedCaptionText}"); if (monitor != null) monitor.ShowingDialog = false; } } diff --git a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs index 8d81dacdea..4b7666ea8c 100644 --- a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs +++ b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs @@ -318,28 +318,33 @@ namespace ICSharpCode.Core { // If Directory.GetFiles() searches the 8.3 name as well as the full name so if the filemask is // "*.xpt" it will return "Template.xpt~" - bool isExtMatch = Regex.IsMatch(filemask, @"^\*\..{3}$"); - string ext = null; - string[] file = Directory.GetFiles(directory, filemask); - if (isExtMatch) ext = filemask.Remove(0,1); - - foreach (string f in file) { - if (ignoreHidden && (File.GetAttributes(f) & FileAttributes.Hidden) == FileAttributes.Hidden) { - continue; - } - if (isExtMatch && Path.GetExtension(f) != ext) continue; + try { + bool isExtMatch = Regex.IsMatch(filemask, @"^\*\..{3}$"); + string ext = null; + string[] file = Directory.GetFiles(directory, filemask); + if (isExtMatch) ext = filemask.Remove(0,1); - collection.Add(f); - } - - if (searchSubdirectories) { - string[] dir = Directory.GetDirectories(directory); - foreach (string d in dir) { - if (ignoreHidden && (File.GetAttributes(d) & FileAttributes.Hidden) == FileAttributes.Hidden) { + foreach (string f in file) { + if (ignoreHidden && (File.GetAttributes(f) & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } - SearchDirectory(d, filemask, collection, searchSubdirectories, ignoreHidden); + if (isExtMatch && Path.GetExtension(f) != ext) continue; + + collection.Add(f); + } + + if (searchSubdirectories) { + string[] dir = Directory.GetDirectories(directory); + foreach (string d in dir) { + if (ignoreHidden && (File.GetAttributes(d) & FileAttributes.Hidden) == FileAttributes.Hidden) { + continue; + } + SearchDirectory(d, filemask, collection, searchSubdirectories, ignoreHidden); + } } + } catch (UnauthorizedAccessException) { + // Ignore exception when access to a directory is denied. + // Fixes SD2-893. } }