/// <summary> /// 创建符合要求的文件夹 /// </summary> /// <param name="parentId"></param> /// <param name="folderName"></param> /// <returns></returns> private static IPortableDeviceValues GetRequiredPropertiesForFolder(string parentId, string folderName) { IPortableDeviceValues values = new PortableDeviceTypesLib.PortableDeviceValues() as IPortableDeviceValues; _tagpropertykey WPD_OBJECT_PARENT_ID = new _tagpropertykey(); WPD_OBJECT_PARENT_ID.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_PARENT_ID.pid = 3; values.SetStringValue(ref WPD_OBJECT_PARENT_ID, parentId); _tagpropertykey WPD_OBJECT_NAME = new _tagpropertykey(); WPD_OBJECT_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_NAME.pid = 4; values.SetStringValue(WPD_OBJECT_NAME, folderName); _tagpropertykey WPD_OBJECT_ORIGINAL_FILE_NAME = new _tagpropertykey(); WPD_OBJECT_ORIGINAL_FILE_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_ORIGINAL_FILE_NAME.pid = 12; values.SetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, folderName); _tagpropertykey WPD_OBJECT_CONTENT_TYPE = new _tagpropertykey(); WPD_OBJECT_CONTENT_TYPE.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_CONTENT_TYPE.pid = 12; values.SetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, folderName); return(values); }
private IPortableDeviceValues GetRequiredCreateDirPropertiesForContentType(string parentFolderId, string folderName) { IPortableDeviceValues values = new PortableDeviceTypesLib.PortableDeviceValues() as IPortableDeviceValues; var WPD_OBJECT_PARENT_ID = new _tagpropertykey(); WPD_OBJECT_PARENT_ID.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_PARENT_ID.pid = 3; values.SetStringValue(ref WPD_OBJECT_PARENT_ID, parentFolderId); var WPD_OBJECT_ORIGINAL_FILE_NAME = new _tagpropertykey(); WPD_OBJECT_ORIGINAL_FILE_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_ORIGINAL_FILE_NAME.pid = 12; values.SetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, Path.GetFileName(folderName)); var WPD_OBJECT_NAME = new _tagpropertykey(); WPD_OBJECT_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_NAME.pid = 4; values.SetStringValue(WPD_OBJECT_NAME, Path.GetFileName(folderName)); var WPD_OBJECT_CONTENT_TYPE = new _tagpropertykey(); WPD_OBJECT_CONTENT_TYPE.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_CONTENT_TYPE.pid = 7; Guid WPD_CONTENT_TYPE_FOLDER = new Guid(0x27E2E392, 0xA111, 0x48E0, 0xAB, 0x0C, 0xE1, 0x77, 0x05, 0xA0, 0x5F, 0x85); values.SetGuidValue(WPD_OBJECT_CONTENT_TYPE, WPD_CONTENT_TYPE_FOLDER); var WPD_OBJECT_FORMAT = new _tagpropertykey(); WPD_OBJECT_FORMAT.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_FORMAT.pid = 6; Guid WPD_OBJECT_FORMAT_PROPERTIES_ONLY = new Guid(0x30010000, 0xAE6C, 0x4804, 0x98, 0xBA, 0xC5, 0x7B, 0x46, 0x96, 0x5F, 0xE7); values.SetGuidValue(WPD_OBJECT_FORMAT, WPD_OBJECT_FORMAT_PROPERTIES_ONLY); return(values); }
// <summary> /// 创建符合要求的文件 /// </summary> /// <param name="sourcePath"></param> /// <param name="parentId"></param> /// <returns></returns> private static IPortableDeviceValues GetRequiredPropertiesForContentType(string sourcePath, string parentId) { IPortableDeviceValues values = new PortableDeviceTypesLib.PortableDeviceValues() as IPortableDeviceValues; _tagpropertykey WPD_OBJECT_PARENT_ID = new _tagpropertykey(); WPD_OBJECT_PARENT_ID.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_PARENT_ID.pid = 3; values.SetStringValue(ref WPD_OBJECT_PARENT_ID, parentId); _tagpropertykey WPD_OBJECT_SIZE = new _tagpropertykey(); WPD_OBJECT_SIZE.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_SIZE.pid = 11; FileInfo fileInfo = new FileInfo(sourcePath); values.SetUnsignedLargeIntegerValue(WPD_OBJECT_SIZE, (ulong)fileInfo.Length); _tagpropertykey WPD_OBJECT_ORIGINAL_FILE_NAME = new _tagpropertykey(); WPD_OBJECT_ORIGINAL_FILE_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_ORIGINAL_FILE_NAME.pid = 12; values.SetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, Path.GetFileName(sourcePath)); _tagpropertykey WPD_OBJECT_NAME = new _tagpropertykey(); WPD_OBJECT_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_NAME.pid = 4; values.SetStringValue(WPD_OBJECT_NAME, Path.GetFileName(sourcePath)); return(values); }
public IWpdObject CreateDirectory(IWpdObject containerObject, string directoryName) { var values = new PortableDeviceTypesLib.PortableDeviceValues() as IPortableDeviceValues; values.SetGuidValue(ref PortableDevicePKeys.WPD_OBJECT_FORMAT, PortableDeviceGuids.WPD_OBJECT_FORMAT_PROPERTIES_ONLY); values.SetGuidValue(ref PortableDevicePKeys.WPD_OBJECT_CONTENT_TYPE, PortableDeviceGuids.WPD_CONTENT_TYPE_FOLDER); // Parent ID of the new object. values.SetStringValue(ref PortableDevicePKeys.WPD_OBJECT_PARENT_ID, containerObject.ObjectID); // The original file name of the object. values.SetStringValue(PortableDevicePKeys.WPD_OBJECT_ORIGINAL_FILE_NAME, directoryName); // The name of the object on the device. values.SetStringValue(PortableDevicePKeys.WPD_OBJECT_NAME, directoryName); var objectID = string.Empty; containerObject.Content.CreateObjectWithPropertiesOnly(values, ref objectID); return(new WpdObject(objectID, containerObject, containerObject.Content)); }
public void Upload(IWpdObject containerObject, string sourceFilePath, bool overwrite) { var fileInfo = new FileInfo(sourceFilePath); if ((fileInfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory) { this.Upload(containerObject, sourceFilePath, overwrite, "*", true, false); return; } var fileName = Path.GetFileName(sourceFilePath); var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFilePath); var targetPath = containerObject.GetPath() + Path.DirectorySeparatorChar + fileName; var children = containerObject.GetChildren(); foreach (var child in children) { if ((String.Compare(child.OriginalFileName, fileName, true) == 0)) { if (overwrite) { this.Delete(child); break; } else { var ex = new IOException(String.Format("A file with the path \"{0}\" already exists on the device.", targetPath)); if (this.DataCopyError != null) { this.DataCopyError(this, new DataCopyErrorArgs(sourceFilePath, targetPath, ex)); } throw ex; } } } if (this.DataCopyStarted != null) { this.DataCopyStarted(this, new DataCopyStartedArgs(sourceFilePath, targetPath)); } var values = new PortableDeviceTypesLib.PortableDeviceValues() as IPortableDeviceValues; // Parent ID of the new object. values.SetStringValue(ref PortableDevicePKeys.WPD_OBJECT_PARENT_ID, containerObject.ObjectID); // Size in bytes of the new object. values.SetUnsignedLargeIntegerValue(PortableDevicePKeys.WPD_OBJECT_SIZE, (ulong)fileInfo.Length); // The original file name of the object. values.SetStringValue(PortableDevicePKeys.WPD_OBJECT_ORIGINAL_FILE_NAME, fileName); // The name of the object on the device. values.SetStringValue(PortableDevicePKeys.WPD_OBJECT_NAME, fileNameWithoutExtension); IStream targetStream = null; var optimalTransferSizeBytes = 0U; containerObject.Content.CreateObjectWithPropertiesAndData(values, out targetStream, ref optimalTransferSizeBytes, null); try { using (var sourceStream = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read)) { var buffer = new byte[optimalTransferSizeBytes]; var bytesRead = 0; var totalWritten = 0UL; do { bytesRead = sourceStream.Read(buffer, 0, (int)optimalTransferSizeBytes); if (bytesRead > 0) { var written = 0U; targetStream.RemoteWrite(ref buffer[0], (uint)bytesRead, out written); totalWritten += (ulong)written; if (this.DataCopied != null) { this.DataCopied(this, new DataCopiedArgs(sourceFilePath, targetPath, (ulong)fileInfo.Length, totalWritten, (ulong)written)); } } }while (bytesRead > 0); } targetStream.Commit(0); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(String.Format("Failed to upload file \"{0}\": {1}", sourceFilePath, ex)); if (this.DataCopyError != null) { this.DataCopyError(this, new DataCopyErrorArgs(sourceFilePath, targetPath, ex)); } } finally { if (targetStream != null) { Marshal.ReleaseComObject(targetStream); } } if (this.DataCopyEnded != null) { this.DataCopyEnded(this, new DataCopyEndedArgs(sourceFilePath, targetPath)); } }
protected IPortableDeviceValues GetRequiredPropertiesForContentType(string fileName, string parentObjectId) { IPortableDeviceValues values = new PortableDeviceTypesLib.PortableDeviceValues() as IPortableDeviceValues; var WPD_OBJECT_PARENT_ID = new _tagpropertykey(); WPD_OBJECT_PARENT_ID.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_PARENT_ID.pid = 3; values.SetStringValue(ref WPD_OBJECT_PARENT_ID, parentObjectId); FileInfo fileInfo = new FileInfo(fileName); var WPD_OBJECT_SIZE = new _tagpropertykey(); WPD_OBJECT_SIZE.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_SIZE.pid = 11; values.SetUnsignedLargeIntegerValue(WPD_OBJECT_SIZE, (ulong)fileInfo.Length); var WPD_OBJECT_ORIGINAL_FILE_NAME = new _tagpropertykey(); WPD_OBJECT_ORIGINAL_FILE_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_ORIGINAL_FILE_NAME.pid = 12; values.SetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, Path.GetFileName(fileName)); var WPD_OBJECT_NAME = new _tagpropertykey(); WPD_OBJECT_NAME.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC, 0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C); WPD_OBJECT_NAME.pid = 4; values.SetStringValue(WPD_OBJECT_NAME, Path.GetFileName(fileName)); //From Original Tutorial: // "Remark: To keep it easy I extracted the filename and // path of the book and used that to set both the // WPD_OBJECT_ORIGINAL_FILE_NAME and // WPD_OBJECT_NAME properties. return values; }