Jon Deaton
Jon Deaton

Reputation: 4379

How to create a guaranteed invalid full path

I am testing software in C# and must ensure proper behavior (graceful failure) occurs when a program is given an invalid full path. Initially this is trivial,as I give something like "Q:\\fakepath" and since there is no Q drive mounted on the system, the program fails as expected.

However, I would like my test to be robust and want a way to generate a path that is guaranteed to not exist and to not be able to exist. The path must be full since if it doesn't start with a drive letter it will be treated relative to some directory, resulting in no failure.

Some approaches I have though of are to search for local drives that are mounted and then pick a drive letter that does not appear. This would work fine and I might end up using this, but I would prefer a more elegant solution such as using a drive letter that could not possibly exist.

Another (potential) option is to use invalid characters in the path name. However, using invalid characters is not preferred as it actually results in a different failure mode of the program.

So formally: How can I most elegantly generate a full path that is guaranteed not be invalid?

EDIT: The program I am testing will go ahead and create a directory (including parent directories) if it is on a valid drive but in a location that does not already exist. Hence, this path needs to be something that couldn't be created with something like Directory.CreateDirectory(<path>), not just something that doesn't already exist.

Upvotes: 1

Views: 713

Answers (5)

Prakash Sarraff
Prakash Sarraff

Reputation: 1

You can try this approach. Not sure though it would work or not but a worth try.

use path: Q:\asddsafkdjfkasjdfklahsjfhskdjfladjfhsafjklasdjfkashfkajsdfhasdklfjashdfkljasdhfklajdfajsdfklajsfkjasjfhadkfjasflhakldfjashdfklajsdjfhaksldjfahsdkljadfklajfkjlkajfkljagkjklfdjgklajdkfljgskljgklfjskgjfkljdsgkfsdgsfgsdfgsfggsdfgsfdgsgwesdfgdgjgfadfsfgffgfsdghijklm

Don't bother about counting the total number of letters, you can do the same using http://www.lettercount.com/

The trick is the max length of windows folder can be 260. Though I tried in on Windows 10 and the max length allowed to me is 247. Source_MAX_Length_Of_Folder_On_Windows

So, this folder is guaranteed to be never found. Cheers :)

Although, I think the most elegant solution is checking the mounted drives and generate a path afterwards that you have already mentioned and decided to keep it as a last option.

Upvotes: 0

Diado
Diado

Reputation: 2257

You could try using one of the reserved words, for instance C:\NUL (case-sensitive). Trying to create such directory will cause a DirectoryNotFoundException. More details here.

Upvotes: 1

Scott Chamberlain
Scott Chamberlain

Reputation: 127593

One way to get a guaranteed invalid folder path is have a file that exists with the same name as part of the directory path.

public string Example()
{
    string filePath = Path.GetTempFileName(); //Creates a uniquely named, zero-byte temporary file on disk.
    var invalidDirectoryPath = Path.Combine(filePath, "CanNotExist");
    Directory.CreateDirectory(invalidDirectoryPath); //throws a IOException
}

Upvotes: 1

Gabriel
Gabriel

Reputation: 1942

You can use some really long path (say a thousand characters). Your program won't probably be able to create it as it is invalid.

Upvotes: 0

DavidG
DavidG

Reputation: 119046

One method would be to use the Windows API to create a temporary folder. This might sound counterintuitive, but now you have a known empty folder, any path you specify inside it is guaranteed to not exist. For example:

//From https://stackoverflow.com/a/278457/1663001:
public string GetTemporaryDirectory()
{
    string tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
    Directory.CreateDirectory(tempDirectory);
    return tempDirectory;
}

public string GetNonexistantPath()
{
    return Path.Combine(GetTemporaryDirectory(), "no-such-file");
}

Upvotes: 2

Related Questions