Ejemplo n.º 1
0
        /// <summary>Copy a file from EFS to the specified System.Stream.</summary>
        /// <remarks>Unlike the rest of the code in this class, this method is safe to call from any thread.</remarks>
        /// <param name="sOutput"></param>
        /// <param name="idFile"></param>
        void CopyFileToStream(Stream sOutput, int idFile)
        {
            using (var s = pool.GetSession())
                using (var trans = s.BeginTransaction())
                {
                    var e = EFS.byId(rs, idFile);
                    if (null == e)
                    {
                        throw new FileNotFoundException();
                    }

                    using (var sInput = e.data.Read(rs.cursor))
                        EFS.CopyStream(sInput, sOutput);
                }
        }
Ejemplo n.º 2
0
        /// <summary>Iterate over the selected files and folders.</summary>
        /// <param name="itemIds">Selected item IDs.</param>
        /// <param name="actFile">Will be called for every file in the selection, including the files in a sumbolders.</param>
        /// <param name="actFolder">Will be called for every folder in the selection.</param>
        void IterateSelection(IEnumerable <int> itemIds, Action <EfsEntry, string> actFile, Action <EfsEntry, string> actFolder)
        {
            foreach (int idFile in itemIds)
            {
                EfsEntry ee = EFS.byId(rs, idFile);
                if (ee.isDirectory)
                {
                    actFolder(ee, ee.name);
                    var pending = new Queue <Tuple <string, int> >();
                    pending.Enqueue(Tuple.Create(ee.name, ee.id));

                    while (pending.Count > 0)
                    {
                        var p = pending.Dequeue();

                        foreach (EfsEntry eChild in EFS.ListChildren(rs, p.Item2))
                        {
                            string path = Path.Combine(p.Item1, eChild.name);
                            if (eChild.isDirectory)
                            {
                                pending.Enqueue(Tuple.Create(path, eChild.id));
                                actFolder(eChild, path);
                            }
                            else
                            {
                                actFile(eChild, path);
                            }
                        }
                    }
                }
                else
                {
                    actFile(ee, ee.name);
                }
            }
        }
Ejemplo n.º 3
0
        private void list_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            var fi = list.FocusedItem;

            if (null == fi || null == fi.Tag)
            {
                return;
            }

            int      idFile = (int)(fi.Tag);
            EfsEntry eFile  = EFS.byId(rs, idFile);

            if (eFile.isDirectory)
            {
                if (!nodeCurrent.IsExpanded)
                {
                    nodeCurrent.Expand();
                }

                tree.SelectedNode = nodeCurrent.Nodes.All()
                                    .Where(n => n.Tag != null && (int)n.Tag == idFile)
                                    .FirstOrDefault();
            }
        }