public override VirtualDisk CreateDifferencingDisk(string path)
 {
     using (VirtualDisk disk = OpenDisk())
     {
         return(disk.CreateDifferencingDisk(path));
     }
 }
 public override VirtualDisk CreateDifferencingDisk(DiscFileSystem fileSystem, string path)
 {
     using (VirtualDisk disk = OpenDisk())
     {
         return(disk.CreateDifferencingDisk(fileSystem, path));
     }
 }
예제 #3
0
        private void CreateDiffDisk()
        {
            string   child;
            PSObject parentObj = ResolveNewDiskPath(out child);

            PSObject baseDiskObj = SessionState.InvokeProvider.Item.Get(new string[] { BaseDisk }, false, true)[0];

            VirtualDisk baseDisk = null;

            try
            {
                if (baseDiskObj.BaseObject is FileInfo)
                {
                    baseDisk = VirtualDisk.OpenDisk(((FileInfo)baseDiskObj.BaseObject).FullName, FileAccess.Read);
                }
                else if (baseDiskObj.BaseObject is DiscFileInfo)
                {
                    DiscFileInfo dfi = (DiscFileInfo)baseDiskObj.BaseObject;
                    baseDisk = VirtualDisk.OpenDisk(dfi.FileSystem, dfi.FullName, FileAccess.Read);
                }
                else
                {
                    WriteError(new ErrorRecord(
                                   new FileNotFoundException("The file specified by the BaseDisk parameter doesn't exist"),
                                   "BadBaseDiskLocation",
                                   ErrorCategory.InvalidArgument,
                                   null));
                    return;
                }

                VirtualDisk newDisk = null;
                if (parentObj.BaseObject is DirectoryInfo)
                {
                    string path = Path.Combine(((DirectoryInfo)parentObj.BaseObject).FullName, child);
                    using (baseDisk.CreateDifferencingDisk(path)) { }
                    newDisk = new OnDemandVirtualDisk(path, FileAccess.ReadWrite);
                }
                else if (parentObj.BaseObject is DiscDirectoryInfo)
                {
                    DiscDirectoryInfo ddi  = (DiscDirectoryInfo)parentObj.BaseObject;
                    string            path = Path.Combine(ddi.FullName, child);
                    using (baseDisk.CreateDifferencingDisk(ddi.FileSystem, path)) { }
                    newDisk = new OnDemandVirtualDisk(ddi.FileSystem, path, FileAccess.ReadWrite);
                }
                else
                {
                    WriteError(new ErrorRecord(
                                   new DirectoryNotFoundException("Cannot create a virtual disk in that location"),
                                   "BadDiskLocation",
                                   ErrorCategory.InvalidArgument,
                                   null));
                    return;
                }

                WriteObject(newDisk, false);
            }
            finally
            {
                if (baseDisk != null)
                {
                    baseDisk.Dispose();
                }
            }
        }