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;
 }
Exemple #3
0
 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);
        }
Exemple #6
0
 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;
 }