// === 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()); }
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(); }