internal static new IFileSystemInformation Create(string originalPath, SafeFileHandle fileHandle, FileBasicInfo info, IFileService fileService) { if ((info.Attributes & FileAttributes.FILE_ATTRIBUTE_DIRECTORY) == 0) throw new ArgumentOutOfRangeException(nameof(info)); var directoryInfo = new DirectoryInformation(fileService); directoryInfo.PopulateData(originalPath, fileHandle, info); return directoryInfo; }
public UploadFile( IServerConnection serverConnection, int receiverNumber, FileBasicInfo fileBasicInfo) { _serverConnection = serverConnection; _receiverNumber = receiverNumber; _fileBasicInfo = fileBasicInfo; }
public static PRJ_FILE_BASIC_INFO Create(FileBasicInfo basicInfo) { return(new PRJ_FILE_BASIC_INFO { IsDirectory = basicInfo.IsDirectory, FileSize = basicInfo.FileSize, CreationTime = basicInfo.CreationTime.ToFileTime(), LastAccessTime = basicInfo.LastAccessTime.ToFileTime(), LastWriteTime = basicInfo.LastWriteTime.ToFileTime(), ChangeTime = basicInfo.ChangeTime.ToFileTime(), FileAttributes = (uint)basicInfo.FileAttributes, }); }
public void Execute() { var openFileDialog = new OpenFileDialog(); openFileDialog.ShowDialog(); string filePath = openFileDialog.FileName; if (!string.IsNullOrEmpty(filePath)) { string fileName = Path.GetFileName(openFileDialog.FileName); byte[] fileBytes = File.ReadAllBytes(filePath); var file = new FileBasicInfo(fileName, fileBytes); _eventAggregator.Publish(new FileOpened(file)); } }
/// <summary> /// Gets file system item info from the user file system item. /// Removes Pinned, Unpinned and Offline flags from attributes. /// </summary> /// <param name="userFileSystemItem">User file system item info.</param> /// <returns><see cref="FileSystemItemBasicInfo"/> object.</returns> private static IFileSystemItemBasicInfo GetBasicInfo(FileSystemInfo userFileSystemItem) { FileSystemItemBasicInfo itemInfo; if (userFileSystemItem is FileInfo) { itemInfo = new FileBasicInfo(); } else { itemInfo = new FolderBasicInfo(); } // Remove Pinned, unpinned and offline flags, // so they do not occasionally go into the remote storage. FileAttributes flags = userFileSystemItem.Attributes & (FileAttributes) ~FileAttributesExt.Pinned & (FileAttributes) ~FileAttributesExt.Unpinned & (FileAttributes) ~FileAttributesExt.Offline; itemInfo.Name = userFileSystemItem.Name; itemInfo.Attributes = flags; itemInfo.CreationTime = userFileSystemItem.CreationTime; itemInfo.LastWriteTime = userFileSystemItem.LastWriteTime; itemInfo.LastAccessTime = userFileSystemItem.LastAccessTime; itemInfo.ChangeTime = userFileSystemItem.LastWriteTime; itemInfo.CustomData = PlaceholderItem.GetItem(userFileSystemItem.FullName).GetCustomData(); if (userFileSystemItem is FileInfo) { ((FileBasicInfo)itemInfo).Length = ((FileInfo)userFileSystemItem).Length; } ; return(itemInfo); }
public PlaceholderInfo(FileBasicInfo basicInfo) { BasicInfo = basicInfo; }
protected virtual void PopulateData(string originalPath, SafeFileHandle fileHandle, FileBasicInfo info) { _source = Source.FileInfo; string finalPath = originalPath; try { string originalRoot = Paths.GetRoot(originalPath); finalPath = FileDesktopMethods.GetFinalPathNameByHandle(fileHandle, GetFinalPathNameByHandleFlags.FILE_NAME_NORMALIZED); // GetFinalPathNameByHandle will use the legacy drive for the volume (e.g. \\?\C:\). We may have started with C:\ or some other // volume name format (\\?\Volume({GUID}), etc.) and we want to put the original volume specifier back. finalPath = Paths.ReplaceCasing(finalPath, originalPath); } catch { if (originalPath.IndexOf(@"pipe", StringComparison.OrdinalIgnoreCase) == -1) { // Getting the final path name doesn't work with the pipes device. Not sure if there is a programmatic way // to know if an arbitrary file handle won't work with GetFinalPathName- potentially may be other cases. throw; } } _source = Source.FindResult; Path = finalPath; Attributes = (System.IO.FileAttributes)info.Attributes; CreationTime = info.CreationTime; LastAccessTime = info.LastAccessTime; LastWriteTime = info.LastWriteTime; Name = Paths.GetFileOrDirectoryName(finalPath) ?? finalPath; Exists = true; }
internal static IFileSystemInformation Create(string originalPath, SafeFileHandle fileHandle, FileBasicInfo info, IFileService fileService) { if ((info.Attributes & FileAttributes.FILE_ATTRIBUTE_DIRECTORY) != 0) { return DirectoryInformation.Create(originalPath, fileHandle, info, fileService); } else { return FileInformation.Create(originalPath, fileHandle, info, fileService); } }
public ProjectedDirectoryEntry(string fileName, FileBasicInfo basicInfo) { FileName = fileName; BasicInfo = basicInfo; }
/// <summary> /// Gets a user file system item info from the remote storage data. /// </summary> /// <param name="remoteStorageItem">Remote storage item info.</param> /// <returns>User file system item info.</returns> public static FileSystemItemBasicInfo GetUserFileSystemItemBasicInfo(IHierarchyItemAsync remoteStorageItem) { FileSystemItemBasicInfo userFileSystemItem; if (remoteStorageItem is IFileAsync) { userFileSystemItem = new FileBasicInfo(); } else { userFileSystemItem = new FolderBasicInfo(); } userFileSystemItem.Name = remoteStorageItem.DisplayName; userFileSystemItem.Attributes = FileAttributes.Normal; userFileSystemItem.CreationTime = remoteStorageItem.CreationDate; userFileSystemItem.LastWriteTime = remoteStorageItem.LastModified; userFileSystemItem.LastAccessTime = remoteStorageItem.LastModified; userFileSystemItem.ChangeTime = remoteStorageItem.LastModified; // If the item is locked by another user, set the LockedByAnotherUser to true. // This will set read-only arrtibute on files. // Note that read-only attribute is a convenience feture, it does not protect files from modification. userFileSystemItem.LockedByAnotherUser = remoteStorageItem.ActiveLocks.Length > 0; if (remoteStorageItem is IFileAsync) { // We send the ETag to // the server inside If-Match header togeter with updated content from client. // This will make sure the changes on the server is not overwritten. ((FileBasicInfo)userFileSystemItem).ETag = ((IFileAsync)remoteStorageItem).Etag; ((FileBasicInfo)userFileSystemItem).Length = ((IFileAsync)remoteStorageItem).ContentLength; } ; // Set custom columns to be displayed in file manager. // We create property definitions when registering the sync root with corresponding IDs. List <FileSystemItemPropertyData> customProps = new List <FileSystemItemPropertyData>(); LockInfo lockInfo = remoteStorageItem.ActiveLocks.FirstOrDefault(); if (lockInfo != null) { customProps.AddRange( new ServerLockInfo() { LockToken = lockInfo.LockToken.LockToken, Owner = lockInfo.Owner, Exclusive = lockInfo.LockScope == LockScope.Exclusive, LockExpirationDateUtc = DateTimeOffset.Now.Add(lockInfo.TimeOut) }.GetLockProperties(Path.Combine(Config.Settings.IconsFolderPath, "LockedByAnotherUser.ico")) ); } if (remoteStorageItem is IFileAsync) { customProps.Add(new FileSystemItemPropertyData(5, ((IFileAsync)remoteStorageItem).Etag)); } ; userFileSystemItem.CustomProperties = customProps; return(userFileSystemItem); }
public FileOpened(FileBasicInfo fileInfo) { FileInfo = fileInfo; }