Click here to Skip to main content
15,860,859 members
Articles / Desktop Programming / ATL
Article

VS File Finder

Rate me:
Please Sign up or sign in to vote.
4.90/5 (39 votes)
8 May 20053 min read 221.6K   3.3K   37   77
A Visual Studio add-in to help navigate around large projects.

Sample Image - VSFileFinderScreenShot.gif

Introduction

VS File Finder is a Visual Studio .NET 2003 Add-In that helps you find files quickly in large projects. It is written in C++ and can list files from all the project types that Visual Studio supports.

After installing, you will see a new window in the IDE listing all the files in your current solution. By typing a few letters from any part of a filename, you can quickly narrow down the list to just a few files and then open the file you are interested in.

This is more useful than the Solution Explorer or the file open dialog in large projects as files can be spread over many folders and you might only remember part of a file name.

There are options to highlight or exclude files based on the file name so you can quickly get to the files you want.

Requirements

The add-in should work well with projects written in any of the languages Visual Studio .NET supports. I have tested the add-in with C++, C# and VB.NET projects.

The add-in works with Visual Studio .NET 2003 (version 7.1). It does not work with Visual Studio .NET 2002, Visual Studio .NET 2005 beta or any previous version of Visual Studio. Adding support for VS2002 or VS2005 may be as simple as changing the registration code to list the add-in as working with those versions or it may require some code changes (I don't have access to either of these versions to find out).

Background

The add-in uses the Visual Studio .NET automation interface to find the files in the project and to display its window.

It took a long time to find a method of building the file list that was both quick and reliable. I started with a version that built a list of files and then tried to use the solution events to update the list whenever the project changed. This method didn't work that well as some actions (like loading a solution) can cause a lot of events to be triggered and some actions don't generate events or send events that are too generic to work out their effect on the list of files. I tried adding more and more event handlers but this method seemed doomed to failure.

The method that I now use is to rebuild the list of files on each event. To keep things working quickly, I delay the actual building of the list by a few hundred milliseconds so multiple events will get batched up into one rebuild. The add-in also uses a virtual list control to reduce the amount of flicker when the list changes.

This method seems to work well even with large solutions (I typically use it on a project with two or three thousand files with no problems at all).

Using the code

There are a few bits of code from this project that might be useful for other projects. SolutionExplorer.cpp/.h provides the base class for classes that need to iterate over the files in a solution in a visitor style and hides a lot of the tedious details.

The code also has some useful helper classes for handling Visual Studio events and has some code for displaying and sorting a virtual list control.

Points of Interest

The solution is actually built using two projects, a Visual Studio Add-in and an ActiveX control. There seems to be an odd problem with hosting ActiveX controls in Visual Studio when the controls are built using MFC. The control gains an extra border which should not be there. This also happens with simple AppWizard created code as well, so I am wondering if this is an MFC bug. The only solution I could find is to call DestroyTracker in CVSFileFinderCtrl::OnActivateInPlace. This fixes the problem but I would be interested to find out why this is needed.

History

  • 12 March 2004 - Version 1.0 released
  • 5 April 2004 - Version 2.0 released
    • Fixed issues with C# and VB projects
    • Added options and about dialogs
    • Added exclude filter
    • Added highlight filter
    • Added code to store column widths on exit

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United Kingdom United Kingdom
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
SuggestionPlease mention the tool usage . Pin
krravisha17-Sep-13 19:17
krravisha17-Sep-13 19:17 
SuggestionQuick Open File - For VS2010 Users Pin
lotusdust6-Apr-12 9:22
lotusdust6-Apr-12 9:22 
QuestionSource files navigation Pin
Grotichaz Morek29-Jul-07 10:58
Grotichaz Morek29-Jul-07 10:58 
QuestionAdd the new project types Pin
karabagamoorthy16-Nov-06 0:17
karabagamoorthy16-Nov-06 0:17 
GeneralNew version with Visual Studio 2005 support Pin
J W Payne10-Jun-06 10:18
J W Payne10-Jun-06 10:18 
GeneralGreat Work & Small Suggestion Pin
Paul Hooper20-Feb-06 19:12
Paul Hooper20-Feb-06 19:12 
GeneralVersion 3.1.1 Pin
J W Payne8-May-05 4:47
J W Payne8-May-05 4:47 
There is now an updated version of this add-in on my web site at http://www.zero-one-zero.com/vs. The new version has a few features not included in the version here and adds support for Visual Studio 2005 (beta 2).

Jonathan
GeneralInstaller for VS 2005 Beta 2 Pin
Mark Levison25-Apr-05 8:18
Mark Levison25-Apr-05 8:18 
GeneralRe: Installer for VS 2005 Beta 2 Pin
J W Payne25-Apr-05 8:54
J W Payne25-Apr-05 8:54 
GeneralRe: Installer for VS 2005 Beta 2 Pin
Mark Levison6-May-05 4:52
Mark Levison6-May-05 4:52 
GeneralRe: Installer for VS 2005 Beta 2 Pin
J W Payne8-May-05 4:45
J W Payne8-May-05 4:45 
GeneralRe: Installer for VS 2005 Beta 2 Pin
Pablo Aliskevicius15-Apr-06 23:11
Pablo Aliskevicius15-Apr-06 23:11 
GeneralRe: Installer for VS 2005 Beta 2 Pin
J W Payne10-Jun-06 10:15
J W Payne10-Jun-06 10:15 
GeneralVery Good one Pin
VC Sekhar Parepalli1-Feb-05 19:56
VC Sekhar Parepalli1-Feb-05 19:56 
GeneralRe: Very Good one Pin
J W Payne7-Feb-05 7:47
J W Payne7-Feb-05 7:47 
GeneralRe: Very Good one Pin
VC Sekhar Parepalli7-Feb-05 8:51
VC Sekhar Parepalli7-Feb-05 8:51 
GeneralRe: Very Good one Pin
J W Payne8-Feb-05 1:39
J W Payne8-Feb-05 1:39 
GeneralRe: Very Good one Pin
VC Sekhar Parepalli8-Feb-05 19:07
VC Sekhar Parepalli8-Feb-05 19:07 
GeneralRe: Very Good one Pin
J W Payne10-Jun-06 10:16
J W Payne10-Jun-06 10:16 
GeneralSuggestion Pin
Uwe Keim19-Jan-05 1:32
sitebuilderUwe Keim19-Jan-05 1:32 
GeneralSolution on unmodeled projects Pin
Ad016-Dec-04 12:29
Ad016-Dec-04 12:29 
GeneralProblem with Auto-Hide Pin
Urs Eichman8-Nov-04 21:06
Urs Eichman8-Nov-04 21:06 
GeneralVersion 3.1 Pin
J W Payne12-Jun-04 11:13
J W Payne12-Jun-04 11:13 
GeneralRe: Version 3.1 Pin
huzzaboo18-Jun-04 9:58
huzzaboo18-Jun-04 9:58 
GeneralMinor feature request Pin
huzzaboo11-Jun-04 7:22
huzzaboo11-Jun-04 7:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.