Exemplo n.º 1
0
        // ===  ResDirInfo() (TYPE_REQ_DIRECTORY) === //
        private void ResDirInfo(ReqDirInfoPack reqPack) // 선택한 디렉토리에 있는 파일과 하위폴더정보를 보내준다.
        {
            string            path    = rootPath + reqPack.Path;
            ResDirInfoPack    resPack = new ResDirInfoPack();    // 디렉토리 정보담는 Pack
            FileInfoStructure fis     = new FileInfoStructure(); // 파일정보 담는 구조체 인스턴스 ->WHP참조

            DirectoryInfo di = new DirectoryInfo(path);

            foreach (DirectoryInfo d in di.GetDirectories())                         // 하위 디렉토리 정보담는다.
            {
                if ((d.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) // 숨김폴더는 제외
                {
                    continue;
                }

                fis.FileName   = d.Name;
                fis.AccessDate = d.LastAccessTime.ToString();
                fis.FileSize   = 0;
                fis.FileType   = 'd';

                resPack.FilesInfo.Add(fis); // FilesInfo는 List
            }

            foreach (FileInfo fi in di.GetFiles()) // 파일들 정보담는다.
            {
                fis.FileName   = fi.Name;
                fis.FileSize   = fi.Length;
                fis.AccessDate = fi.LastWriteTime.ToString();
                fis.FileType   = 'f';

                resPack.FilesInfo.Add(fis);
            }


            serializer.Serialize(clientStream, resPack);

            Console.WriteLine("<->디렉토리 정보 전송 : {0} ", ((IPEndPoint)client.Client.RemoteEndPoint).ToString());
        }
Exemplo n.º 2
0
        private void RefreshList(string path) // 선택한 폴더가 바뀌거나, 새 폴더를 추가하는 작업이있을때 ListView를 갱신한다.
        {
            BinaryFormatter serializer = new BinaryFormatter();
            TcpClient       client     = fileConnect();
            NetworkStream   stream     = client.GetStream();

            double size;
            string stringSize;
            string dirName = path.Substring(path.LastIndexOf("\\") + 1, path.Length - (path.LastIndexOf("\\") + 1));

            ReqDirInfoPack reqPack = new ReqDirInfoPack(); // 폴더에있는 파일/하위폴더 정보를 요청할 Pack

            reqPack.Path = path;                           //
            serializer.Serialize(stream, reqPack);

            ResDirInfoPack resPack = (ResDirInfoPack)serializer.Deserialize(stream);

            list_File.Items.Clear();    // ListView 초기화
            selectedItem       = null;  // 선택 아이템 없음
            btn_Rename.Enabled = false; // 이름바꾸기
            btn_Delete.Enabled = false; // 삭제 버튼 비활성화

            // --- 용량 단위 변환 ---//
            foreach (FileInfoStructure fis in resPack.FilesInfo)
            {
                int img = 0;             // 파일 아이콘 인덱스 (0)
                if (fis.FileType == 'd') // 폴더 아이콘 인덱스 (1)
                {
                    stringSize = "";
                    img        = 1;
                }
                else if (fis.FileSize >= 1024 * 1024 * 1024)
                {
                    size       = (double)fis.FileSize / (double)(1024 * 1024 * 1024);
                    stringSize = string.Format("{0:F2}GB", size);
                }
                else if (fis.FileSize >= 1024 * 1024)
                {
                    size       = fis.FileSize / (1024 * 1024);
                    stringSize = string.Format("{0}MB", size);
                }
                else if (fis.FileSize >= 1024)
                {
                    size       = fis.FileSize / 1024;
                    stringSize = string.Format("{0}KB", size);
                }
                else
                {
                    stringSize = "1KB";
                }
                // -------------------//

                // 리스트 뷰에 추가할 아이템 만듬 //
                ListViewItem item = new ListViewItem(new string[]
                {
                    fis.FileName,
                    fis.AccessDate,
                    stringSize,
                    string.Format("{0}", fis.FileType),
                    string.Format("{0}", fis.FileSize)
                }, img);

                list_File.Items.Add(item);
            }

            stream.Close(); client.Close();
        }