/// <summary>
        /// Gets the specified File by the file name or a file nested inside a subdirectory owned by this directory
        /// </summary>
        /// <param name="pathToFile">Information.txt OR Lenovo\Information\Information.txt</param>
        /// <returns></returns>
        public Task <IFile> GetFileAsync(string pathToFile)
        {
            AssertDirectoryExists();

            return(Task.Factory.StartNew(() =>
            {
                IFile file = null;

                if (!String.IsNullOrWhiteSpace(pathToFile))
                {
                    // Get the full path to the desired file
                    string filePath = Path.Combine(_systemPathMapper.GetUserContextFolder(this.FullPath), pathToFile);

                    if (File.Exists(filePath))
                    {
                        // Create new file info object, use this Directory's path and the passed in path to get it
                        var fileInfo = new FileInfo(filePath);

                        // Make sure the file info is null
                        //if (fileInfo != null)
                        //  {
                        // Create new WinFile object using file info
                        file = new SystemContextFile(fileInfo);
                        //}
                    }
                }

                return file;
            }));
        }
        /// <summary>
        /// Creates a file using the given file path, contents, and creation option
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="contents"></param>
        /// <param name="collisionOption"></param>
        /// <returns></returns>
        public Task <IFile> CreateFileAsync(string fileName, string contents, CreationOption collisionOption)
        {
            AssertDirectoryExists();

            return(Task.Factory.StartNew(() =>
            {
                IFile createdFile = null;
                string filePath = Path.Combine(_systemPathMapper.GetUserContextFolder(this.FullPath), fileName);

                // File exists
                if (File.Exists(filePath))
                {
                    switch (collisionOption)
                    {
                    case CreationOption.OpenIfExists:
                        File.AppendAllText(filePath, contents);
                        break;

                    case CreationOption.ReplaceExisting:
                        File.WriteAllText(filePath, contents);
                        break;

                    case CreationOption.ThrowIfExists:
                        throw new Exceptions.FileAlreadyExistsException("The file to be created already exists in the target directory");

                    default:
                        goto case CreationOption.ReplaceExisting;
                    }
                }
                // File does not already exist
                else
                {
                    if (contents != null)
                    {
                        // Contents are not null, write all the text to the new file
                        File.WriteAllText(filePath, contents);
                    }
                    else
                    {
                        // Contents were null, just create a new, empty file
                        File.Create(filePath).Dispose();
                    }
                }

                // Create a new WinFile object using FileInfo for the filePath
                createdFile = new SystemContextFile(new FileInfo(filePath));

                return createdFile;
            }));
        }