Click here to Skip to main content
Licence 
First Posted 19 Apr 2005
Views 47,121
Bookmarked 24 times

Directory.CreateDirectory() method bug fixed

By | 19 Apr 2005 | Article
Fixing System.IO.Directory.CreateDirectory() security bug.

Introduction

CreateDirectory() method of System.IO.Directory class has some security bug. If account running the code has no read permissions in the root directory, System.IO.Directory.CreateDirectory() method will fail. And you will get such error:

Could not find a part of the path "<full directory path>"

It is because System.IO.Directory.CreateDirectory() checks folder existence from root to lowest folder. The code provided in this article performs the scan in the reverse way - from lowest to upper. Therefore, it won't fail unless it will get to some folder with no read permissions.

Using the code

To use the provided code, add Microsoft Scripting Runtime COM object to your project references.

public static void CreateDirectory(string DirectoryPath)
{
    // trim leading \ character
    DirectoryPath = DirectoryPath.TrimEnd(Path.DirectorySeparatorChar);
    Scripting.FileSystemObject fso = new Scripting.FileSystemObjectClass();
    // check if folder exists, if yes - no work to do
    if(!fso.FolderExists(DirectoryPath))
    {
        int i = DirectoryPath.LastIndexOf(Path.DirectorySeparatorChar);
        // find last\lowest folder name
        string CurrentDirectoryName = DirectoryPath.Substring(i+1, 
                                        DirectoryPath.Length-i-1);
        // find parent folder of the last folder
        string ParentDirectoryPath = DirectoryPath.Substring(0,i);
        // recursive calling of function to create all parent folders 
        CreateDirectory(ParentDirectoryPath);
        // create last folder in current path
        Scripting.Folder folder = fso.GetFolder(ParentDirectoryPath);
        folder.SubFolders.Add(CurrentDirectoryName);
    }
}

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

About the Author

Sergey Okhotny

Web Developer

Ukraine Ukraine

Member

http://okhotny.googlepages.com

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Generalcreate directory on remote Client PinmemberReza Madani10:57 26 Jan '09  
General[Message Deleted] Pinmemberandang2:58 9 Jun '05  
GeneralRe: A solution without using Scripting Object PinsussAnonymous7:58 13 Sep '05  
You are a moron!
Generalsolution requires Full Trust PinsussAnonymous1:16 27 Apr '05  

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

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

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120529.1 | Last Updated 19 Apr 2005
Article Copyright 2005 by Sergey Okhotny
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid