Exemplo n.º 1
0
        static void Main(string[] args)
        {
            clsFS Fs = new clsFS();

            Fs.evtEnd += MsgShow;

            //Fs.FsCopy(@"c:\temp\scan.txt", @"c:\temp\test.txt");


            //Fs.FsDir(@"c:\temp");

            DirectoryFiles DD = new DirectoryFiles(Fs.FsDir);

            DD(@"C:\temp");

            Fs.FsWatcher(@"c:\temp");
            Fs.evtCopy += FileCopy;
            Fs.evtCopy += MsgBox;


            while (true)
            {
                System.Threading.Thread.Sleep(1000);
            }
        }
Exemplo n.º 2
0
        public void ShouldReturnSubPathWhenBuilt() {
            Task<string> rootDir = "root";
            var df = new DirectoryFiles(rootDir);

            Task<string> subdir = df["subdir"];

            subdir.TestBuild();

            Assert.That(subdir.Value, Is.EqualTo(@"root\subdir"));
        }
Exemplo n.º 3
0
        public void ShouldReturnSubPathWhenBuilt()
        {
            Task <string> rootDir = "root";
            var           df      = new DirectoryFiles(rootDir);

            Task <string> subdir = df["subdir"];

            subdir.TestBuild();

            Assert.That(subdir.Value, Is.EqualTo(@"root\subdir"));
        }
Exemplo n.º 4
0
        private void NotifyFriends(string chType)
        {
            var rq     = new Request(UserRequestType.IUPDATEDFOLDER);
            var uFiles = new DirectoryFiles(_user.UserDirectory.Path);

            rq.MainData = JsonConvert.SerializeObject(uFiles);
            var jsonRq = JsonConvert.SerializeObject(rq);

            foreach (var fr in _curFriendsIps)
            {
                Console.WriteLine("I NOTIFY FRIEND: " + fr.Value.Split(':')[0] + " because: " + chType);
                Send(jsonRq, IPAddress.Parse(fr.Value.Split(':')[0]));
            }
        }
        async Task LoadFiles()
        {
            HttpResponseMessage response = await httpClient.GetAsync($"/files/getfiles?directory={HomeDirectory}");

            if (response.StatusCode == HttpStatusCode.OK)
            {
                string content = await response.Content.ReadAsStringAsync();

                DirectoryFiles = System.Text.Json.JsonSerializer.Deserialize <string[]>(content);
                DirectoryFiles = DirectoryFiles.Where(file => availableExtensions.Contains(Path.GetExtension(file))).Select(file => Path.GetFileName(file)).ToArray();

                OnDirectoryFilesChanged?.Invoke(null, null);
            }
            else
            {
                throw new Exception("Failed to get files from server");
            }
        }
Exemplo n.º 6
0
        private Tuple <string[], string[]> GetBasesForUpdateFolder(string[] myFiles, DirectoryFiles reciveFiles)
        {
            var myFilesLen    = myFiles.Length;
            var myBasePathLen = _user.UserDirectory.Path.Length;

            for (var i = 0; i < myFilesLen; i++)
            {
                myFiles[i] = myFiles[i].Substring(myBasePathLen + 1);
            }

            var reciveFilesData    = reciveFiles.DirFiles.Keys.ToArray();
            var reciveFilesDataLen = reciveFilesData.Length;
            var reciveFilesBaseLen = reciveFiles.BasePath.Length;

            for (var i = 0; i < reciveFilesDataLen; i++)
            {
                reciveFilesData[i] = reciveFilesData[i].Substring(reciveFilesBaseLen + 1);
            }

            return(new Tuple <string[], string[]>(myFiles, reciveFilesData));
        }
        private void GetFilesInDirectory(CodeActivityContext context)
        {
            try {
                string   _directoryPath     = DirectoryPath.Get(context);
                string   _fileExtension     = FileExtension.Get(context);
                int      _dayCountFrom      = Convert.ToInt16(DayCountFrom.Get(context));
                int      _dayCountTo        = Convert.ToInt16(DayCountTo.Get(context));
                bool     _timestampCategory = Convert.ToBoolean((int)TimestampCategory);
                string[] fileList           = Helper.DirectoryHelper.GetDirectoryFiles(directoryPath: _directoryPath, fileExtension: _fileExtension, timestampCategory: _timestampCategory, dayCountFrom: _dayCountFrom, dayCountTo: _dayCountTo);

                DirectoryFiles.Set(context, fileList);
            } catch (Exception ex) {
                if (Convert.ToBoolean((int)ContinueOnError))
                {
                }
                else
                {
                    throw ex;
                }
            }
        }
Exemplo n.º 8
0
        public void ProcessData()
        {
            if (string.IsNullOrWhiteSpace(SourceDirectoryPath))
            {
                throw new ArgumentException(
                          "The specified directory does not exist or is otherwise invalid. Check the directory in the configuration file and try again.",
                          nameof(SourceDirectoryPath));
            }

            if (!(DirectoryCount > 0))
            {
                throw new ArgumentException(
                          "The specified directory contains no directories for processing. Check the directory contents and try again.",
                          nameof(SourceDirectory));
            }

            if (!(ZipFileCount > 0))
            {
                throw new ArgumentException(
                          "The specified directory contains no files within the directory structure for processing. Check the directory contents and try again.");
            }

            Console.WriteLine(
                $"\rBeginning parse of {SourceDirectory.Name} | {DirectoryCount} Directories containing {ZipFileCount} Zip Files will be processed.\t\t\t\t");

            #region File Processing

            // Single-Threaded Operation
            foreach (KeyValuePair <DirectoryInfo, IEnumerable <FileInfo> > directory in DirectoryFiles.OrderBy(o => o.Value.Count()).ThenByDescending(t => t.Key.Name))
            {
                ProcessDirectory(directory);
            }

            // Multi-Threaded Operation
            //Parallel.ForEach(DirectoryFiles, ProcessDirectory);

            #endregion File Processing
        }
Exemplo n.º 9
0
        //得到目录下的文件名列表
        public List <string> GetDirFiles(string pictureDirectory)
        {
            this.pictureDirectory = pictureDirectory;
            //
            bool                isDirExist        = false;
            List <string>       pictureFileList   = new List <string>();
            DirectoryCollection pictureCollection = new DirectoryCollection();
            DirectoryFiles      pictureDirFiles   = new DirectoryFiles();

            //
            isDirExist = Directory.Exists(pictureDirectory);
            if (isDirExist == false)
            {
                throw new Exception(string.Format("{0}目录不存在.", pictureDirectory));
            }
            else
            {
                #region

                /*
                 *得到父目录下的所有层级目录列表
                 *例如:目录层级如下
                 * D:\刘亦菲
                 *        |
                 *        --1
                 *        |
                 *        --2
                 * DirectoryCollection pictureCollection = new DirectoryCollection();
                 * List<string> directoryList=pictureCollection.getCollection(@"D:\刘亦菲");
                 *
                 * 返回值:
                 * @"D:\刘亦菲"
                 * @"D:\刘亦菲\1"
                 * @"D:\刘亦菲\2"
                 *
                 */
                #endregion
                pictureDictionary = pictureCollection.getDictionary(pictureDirectory);
                List <string> keyList = new List <string>();
                Dictionary <string, string[]> .Enumerator enumerator = pictureDictionary.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    string key = enumerator.Current.Key;
                    keyList.Add(key);
                }
                //如果目录后面没有斜杠:"\\" 则增加
                for (int i = 0; i < keyList.Count; i++)
                {
                    string key = keyList[i];
                    keyList[i] = key.EndsWith("\\") ? key : (Directory.Exists(key) ? key + "\\" : Path.GetDirectoryName(key) + "\\");
                }
                //过滤非目录
                for (int i = 0; i < keyList.Count; i++)
                {
                    string key = keyList[i];
                    keyList[i] = Path.GetDirectoryName(key).EndsWith("\\") ? key : Path.GetDirectoryName(key) + "\\";
                }
                #region

                /*
                 * 遍历列表中的字符串,并按照字符串中路径的目录数量从小到大排序
                 * 举例:列表如下
                 * List<string> testList = new List<string>();
                 * testList.Add(@"D:\test\");
                 * testList.Add(@"D:\test\test1\file.txt");
                 * testList.Add(@"D:\test\test1");
                 * testList.Add(@"D:\test\test1\test0\file.txt");
                 * testList.Add(@"D:\test\");
                 * testList.Add(@"D:\test\test1\test0");
                 *
                 * 片段1:
                 * Path.GetDirectoryName(key).Replace('/', '\\').Split(new char[] {'\\','/'})
                 * 将得到的目录分解成目录
                 * 举例:
                 * key值: D:\test\test1\test0\file.txt
                 * 通过片段1产生临时数组:
                 * {"D:","test","test1","test0",""}
                 *
                 * 片段2:
                 * 去除片段1中产生的临时数组:
                 * Path.GetDirectoryName(key).Replace('/', '\\').Split(new char[] {'\\','/'}).Where(k=>k.Trim()!="")
                 * 通过片段2产生临时数组:
                 * {"D:","test","test1","test0}
                 *
                 * 片段3:计算片段2中临数组的长度
                 * 对于临时数组:{"D:","test","test1","test0}
                 * 此数组的长度为4
                 *
                 * 片段4:遍历List中的字符串,通过片段1,片段2,片段3计算临时数组的长度,并升序排列
                 * keyList.OrderBy(key=>...);
                 * 其中...代码片段2
                 */
                #endregion
                IEnumerable <string> orderKeyList = keyList.OrderBy(key => Path.GetDirectoryName(key).Replace('/', '\\').Split(new char[] { '\\' }).Where(k => k.Trim() != "").Count());
                keyList = orderKeyList.ToList();
                //去重复字符串
                IEnumerable <string> distinctKeyList = keyList.Distinct();
                keyList = distinctKeyList.ToList();
                return(keyList);
            }
        }
Exemplo n.º 10
0
        private void ReceiveMessage()
        {
            var cancelWaitTask = Task.Run(() =>
            {
                using (var resetEvent = new ManualResetEvent(false))
                {
                    _cancellationToken.Token.Register(() => resetEvent.Set());
                    resetEvent.WaitOne();
                }
            });

            try
            {
                _reciv = new UdpClient(_port); // UdpClient для получения данных
                IPEndPoint remoteIp = null;    // адрес входящего подключения
                while (!_cancellationToken.Token.IsCancellationRequested)
                {
                    if (cancelWaitTask.IsCompleted)
                    {
                        break;
                    }
                    var data         = _reciv.Receive(ref remoteIp); // получаем данные
                    var message      = Encoding.UTF8.GetString(data);
                    var decodedRq    = GetRequestFromMessage(message);
                    var answerRq     = new Request();
                    var answerRqJson = "";

                    switch (decodedRq.Type)
                    {
                    case UserRequestType.HAVEDIR:
                        MessageBox.Show("У пользователя уже есть папка");
                        break;

                    case UserRequestType.DENIERQ:
                        MessageBox.Show("Пользователь отклонил запрос дружбы");
                        break;

                    case UserRequestType.ACCEPTRQ:
                        MessageBox.Show("Пользователь принял запрос дружбы");
                        _user.Friends.Add(decodedRq.MainData);
                        if (_curFriendsIps.ContainsKey(decodedRq.MainData))
                        {
                            _curFriendsIps[decodedRq.MainData] = remoteIp.ToString();
                        }
                        else
                        {
                            _curFriendsIps.Add(decodedRq.MainData, remoteIp.ToString());
                        }
                        answerRq.Type           = UserRequestType.FRIENDFINALACCEPT;
                        answerRq.MainData       = _user.PublicKey;
                        answerRq.AdditionalInfo = JsonConvert.SerializeObject(_curFriendsIps);
                        answerRqJson            = JsonConvert.SerializeObject(answerRq);
                        Send(answerRqJson, remoteIp.Address);
                        _thisDisp.Invoke(UpdateFriendsList);
                        answerRq.Type = UserRequestType.IWANTUPDATEFOLDER;
                        answerRqJson  = JsonConvert.SerializeObject(answerRq);
                        Send(answerRqJson, remoteIp.Address);
                        answerRq.Type           = UserRequestType.IHAVENEWFRIEND;
                        answerRq.MainData       = decodedRq.MainData;
                        answerRq.AdditionalInfo = remoteIp.ToString();
                        answerRqJson            = JsonConvert.SerializeObject(answerRq);
                        foreach (var friend in _curFriendsIps)
                        {
                            if (friend.Key != decodedRq.MainData && friend.Key != decodedRq.MainData)
                            {
                                Send(answerRqJson, IPAddress.Parse(friend.Value.Split(':')[0]));
                            }
                        }
                        break;

                    case UserRequestType.IHAVENEWFRIEND:
                        if (_curFriendsIps.ContainsKey(decodedRq.MainData))
                        {
                            _curFriendsIps[decodedRq.MainData] = decodedRq.AdditionalInfo;
                        }
                        else
                        {
                            _user.Friends.Add(decodedRq.MainData);
                            _curFriendsIps.Add(decodedRq.MainData, decodedRq.AdditionalInfo);
                        }
                        break;

                    case UserRequestType.FRIENDRQ:
                        if (decodedRq.MainData == _user.PublicKey)
                        {
                            if (_user.UserDirectory.Path != "")
                            {
                                answerRq.Type = UserRequestType.HAVEDIR;
                                answerRqJson  = JsonConvert.SerializeObject(answerRq);
                                Send(answerRqJson, remoteIp.Address);
                            }
                            else
                            {
                                var quest = MessageBox.Show($"Пользователь {remoteIp} хочет добавить вас в друзья, принять?",
                                                            "Запрос.",
                                                            MessageBoxButtons.YesNo);
                                if (quest == DialogResult.Yes)
                                {
                                    _thisDisp.Invoke(CreateCopyFolder);
                                    answerRq.Type     = UserRequestType.ACCEPTRQ;
                                    answerRq.MainData = _user.PublicKey;
                                    answerRqJson      = JsonConvert.SerializeObject(answerRq);
                                    Send(answerRqJson, remoteIp.Address);
                                }
                                else
                                {
                                    answerRq.Type = UserRequestType.DENIERQ;
                                    answerRqJson  = JsonConvert.SerializeObject(answerRq);
                                    Send(answerRqJson, remoteIp.Address);
                                }
                            }
                        }
                        break;

                    case UserRequestType.FRIENDCHECK:
                        if (decodedRq.MainData == _user.PublicKey)
                        {
                            answerRq.Type     = UserRequestType.FRIENDCHECKANSWER;
                            answerRq.MainData = _user.PublicKey;
                            answerRqJson      = JsonConvert.SerializeObject(answerRq);
                            Send(answerRqJson, remoteIp.Address);
                        }
                        break;

                    case UserRequestType.FRIENDCHECKANSWER:
                        bool iWasEmpty = _curFriendsIps.Count == 0;
                        if (_curFriendsIps.ContainsKey(decodedRq.MainData))
                        {
                            _curFriendsIps[decodedRq.MainData] = remoteIp.ToString();
                        }
                        else
                        {
                            _curFriendsIps.Add(decodedRq.MainData, remoteIp.ToString());
                        }
                        answerRq.Type     = UserRequestType.FRIENDCHECKANSWERFINAL;
                        answerRq.MainData = _user.PublicKey;
                        answerRqJson      = JsonConvert.SerializeObject(answerRq);
                        Send(answerRqJson, remoteIp.Address);
                        _thisDisp.Invoke(UpdateFriendsList);
                        if (iWasEmpty)
                        {
                            _thisDisp.Invoke(StartReceiving);
                            RestoreFolderFromFriend();
                            _thisDisp.Invoke(StopReceiving);
                        }
                        break;

                    case UserRequestType.FRIENDCHECKANSWERFINAL:
                        iWasEmpty = _curFriendsIps.Count == 0;
                        if (_curFriendsIps.ContainsKey(decodedRq.MainData))
                        {
                            _curFriendsIps[decodedRq.MainData] = remoteIp.ToString();
                        }
                        else
                        {
                            _curFriendsIps.Add(decodedRq.MainData, remoteIp.ToString());
                        }
                        if (iWasEmpty)
                        {
                            _thisDisp.Invoke(StartReceiving);
                            RestoreFolderFromFriend();
                            _thisDisp.Invoke(StopReceiving);
                        }
                        _thisDisp.Invoke(UpdateFriendsList);
                        break;

                    case UserRequestType.IWANTUPDATEFOLDER:
                        var uFiles = new DirectoryFiles(_user.UserDirectory.Path);
                        answerRq.Type     = UserRequestType.IWANTSENDFOLDER;
                        answerRq.MainData = JsonConvert.SerializeObject(uFiles);
                        answerRqJson      = JsonConvert.SerializeObject(answerRq);
                        Send(answerRqJson, remoteIp.Address);
                        break;

                    case UserRequestType.IWANTSENDFOLDER:
                        _thisDisp.Invoke(StartReceiving);
                        UpdateFolder(JsonConvert.DeserializeObject <DirectoryFiles>(decodedRq.MainData));
                        _thisDisp.Invoke(StopReceiving);
                        break;

                    case UserRequestType.FRIENDFINALACCEPT:
                        _user.Friends.Add(decodedRq.MainData);
                        if (_curFriendsIps.ContainsKey(decodedRq.MainData))
                        {
                            _curFriendsIps[decodedRq.MainData] = remoteIp.ToString();
                        }
                        else
                        {
                            _curFriendsIps.Add(decodedRq.MainData, remoteIp.ToString());
                        }
                        var newFriends = JsonConvert.DeserializeObject <Dictionary <string, string> >(decodedRq.AdditionalInfo);
                        foreach (var frien in newFriends)
                        {
                            if (!_curFriendsIps.ContainsKey(frien.Key) && frien.Key != _user.PublicKey)
                            {
                                _user.Friends.Add(frien.Key);
                                _curFriendsIps.Add(frien.Key, frien.Value);
                            }
                        }
                        _thisDisp.Invoke(UpdateFriendsList);
                        answerRq.Type = UserRequestType.IWANTUPDATEFOLDER;
                        answerRqJson  = JsonConvert.SerializeObject(answerRq);
                        Send(answerRqJson, remoteIp.Address);
                        break;

                    case UserRequestType.IUPDATEDFOLDER:
                        _thisDisp.Invoke(StartReceiving);
                        UpdateFolder(JsonConvert.DeserializeObject <DirectoryFiles>(decodedRq.MainData), true);
                        _thisDisp.Invoke(StopReceiving);
                        break;

                    case UserRequestType.ERROR:
                        MessageBox.Show("Произошла ошибка при обработке сообщения");
                        break;

                    default:
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Exemplo n.º 11
0
        private void UpdateFolder(DirectoryFiles files, bool fullChanges = false)
        {
            var myFiles     = Directory.GetFiles(_user.UserDirectory.Path, "*", SearchOption.AllDirectories);
            var basesForUpd = GetBasesForUpdateFolder(myFiles, files);
            var filesCount  = myFiles.Length;

            fswTracker.Path = "/";

            Console.WriteLine("IN_UPDATE_FOLDER");
            if (fullChanges)
            {
                Console.WriteLine("IN_FULL_CHANGES");
                if (filesCount != files.DirFiles.Count)
                {
                    var iDeleted = false;
                    foreach (var file in basesForUpd.Item1)
                    {
                        if (!basesForUpd.Item2.Contains(file))
                        {
                            iDeleted = true;
                            File.Delete(Path.Combine(_user.UserDirectory.Path, file));
                        }
                    }
                    if (iDeleted)
                    {
                        Console.WriteLine("SET_TRACKER_BACK_DEL");
                        fswTracker.Path = _user.UserDirectory.Path;
                        _thisDisp.Invoke(FillFolderSpace);
                        return;
                    }
                }

                var iRenamed = false;
                for (var i = 0; i < filesCount; i++)
                {
                    if (!basesForUpd.Item2.Contains(basesForUpd.Item1[i]) && basesForUpd.Item1[i] != basesForUpd.Item2[i])
                    {
                        File.Delete(Path.Combine(_user.UserDirectory.Path, basesForUpd.Item1[i]));

                        var f        = File.Create(Path.Combine(_user.UserDirectory.Path, basesForUpd.Item2[i]));
                        var fileData = files.DirFiles[Path.Combine(files.BasePath, basesForUpd.Item2[i])];
                        f.Write(fileData, 0, fileData.Length);
                        f.Close();
                        iRenamed = true;
                    }
                }
                if (iRenamed)
                {
                    Console.WriteLine("SET_TRACKER_BACK_RENAME");
                    fswTracker.Path = _user.UserDirectory.Path;
                    _thisDisp.Invoke(FillFolderSpace);
                    return;
                }
            }
            foreach (var file in basesForUpd.Item2)
            {
                Console.WriteLine("BASE_RESTORE");
                var newFPath = Path.Combine(_user.UserDirectory.Path, file);

                Directory.CreateDirectory(Path.GetDirectoryName(newFPath));

                var fs = new StreamWriter(newFPath);
                fs.Write("");
                fs.Close();

                var f = File.Exists(newFPath) ? File.Open(newFPath, FileMode.Open) : File.Create(newFPath);

                var fileData = files.DirFiles[Path.Combine(files.BasePath, file)];
                f.Write(fileData, 0, fileData.Length);
                f.Close();
            }
            Console.WriteLine("SET_TRACKER_BACK_JUST");
            fswTracker.Path = _user.UserDirectory.Path;
            _thisDisp.Invoke(FillFolderSpace);
        }