public List <File_info> GetFilesList(string dir) { List <File_info> res = new List <File_info>(); FtpWebResponse response = this.TryGetResponse(WebRequestMethods.Ftp.ListDirectoryDetails, null); if (response == null) { return(res); } StreamReader reader = new StreamReader(response.GetResponseStream()); string s = null; while ((s = reader.ReadLine()) != null) { /*temp*/ Console.WriteLine(s); string[] arr = s.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //res.Add(arr[arr.Length - 1]); File_info fi = new File_info(arr[arr.Length - 1]); res.Add(fi); } response.Close(); return(res); }
public void Run() { File_info fi = null; while (true) { if (fi == null) { string cmd = this.ReceiveCmd(); if (cmd == null) { break; } this.parentForm.AddInfo_to_UI("Received: " + cmd); if (!cmd.StartsWith("Bye", StringComparison.OrdinalIgnoreCase)) { fi = new File_info(); fi.FromXML(cmd); } } else { bool flag = this.ReceiveFile(fi); if (!flag) { break; } fi = null; } } }
public List <File_info> GetFilesList(string dir) { List <File_info> res = new List <File_info>(); if (!this.ftp.IsConnected) { return(res); } if (!string.IsNullOrEmpty(dir)) { try { this.ftp.ChangeDirectory(dir); } catch (Exception ex) { if (this.errorLog != null) { this.errorLog.Add("RebexFTPsource error 2", "Directory error:\n" + ex.ToString()); } return(res); } } FtpItemCollection fi_coll = null; try { fi_coll = this.ftp.GetList(); } catch (Exception ex) { if (this.errorLog != null) { this.errorLog.Add("RebexFTPsource error 1", "GetList failed:\n" + ex.ToString()); } return(res); } foreach (FtpItem item in fi_coll) { File_info fi = new File_info(item.Name); res.Add(fi); fi.mod_time = item.Modified; fi.size = item.Length; } return(res); }
private void open_button_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read); this.fileData_bts = new byte[fs.Length]; fs.Read(this.fileData_bts, 0, this.fileData_bts.Length); fs.Close(); this.filePath_textBox.Text = ofd.FileName; string fileName = ofd.FileName.Substring(ofd.FileName.LastIndexOf('\\') + 1); this.fileInfo = new File_info(fileName, this.fileData_bts.Length); File_info fi = new File_info(); string xml = this.fileInfo.ToXML(); fi.FromXML(xml); } }
private bool ReceiveFile(File_info fi) { byte[] fileBuffer = new byte[fi.length]; int totalReceived = 0; while (totalReceived < fi.length) { try { int count = this.connSocket.Receive(fileBuffer); totalReceived += count; } catch { Console.WriteLine("ClientSide_handler error 1: receive error"); return(false); } } SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = fi.name; int dotIndex = fi.name.LastIndexOf('.'); string format = fi.name.Substring(dotIndex + 1); sfd.Filter = format + "|*." + format; if (sfd.ShowDialog() == DialogResult.OK) { FileStream fs = new FileStream(sfd.FileName, FileMode.Create); fs.Write(fileBuffer, 0, totalReceived); fs.Close(); this.parentForm.AddInfo_to_UI("---> Done, receive file size: " + totalReceived); } return(true); }
static void Main(string[] args) { //파일목록 로드 List <File_info> file_list = new List <File_info>(); DirectoryInfo info = new DirectoryInfo("./files"); //DirectoryInfo : 특정 폴더안에 있는 파일을 접근/ 폴더 생성, 이동 할때 사용하는 클래스 //GetFiles : 접근한 폴더안에 있는 파일정보들을 추출하는 메소드 //var : 프로그램이 시작하기전 해당 변수에 대입된 자료형/클래스를 보고 자동으로 자료형/클래스 맞게 변수를 선언해주는 문법 //foreach (var fileInfo in info.GetFiles()) //C# 개발자가 만든 Fileinfo 클래스에서 마일명/ 사이즈를 추출 및 저장 foreach (FileInfo fileInfo in info.GetFiles()) { File_info file_Info = new File_info(); file_Info.filename = fileInfo.Name; file_Info.filesize = fileInfo.Length; file_list.Add(file_Info); } //서버 생성 - 10000번 포트 사용 TcpListener listener = new TcpListener(11000); //클라이언트 연결 허용 listener.Start(); TcpClient client; NetworkStream net_stream; FileStream file_stream; byte[] datas = new byte[1024]; int data_size; BinaryFormatter formatter = new BinaryFormatter(); formatter.Binder = new AllowAllAssemblyVersionsDeserializationBinder(); //무한반복 - 여러 클라이언트 접속 처리용도 while (true) { //클라이언트 연결 client = listener.AcceptTcpClient(); net_stream = client.GetStream(); //반복 - 클라이언트가 연결을 끊을때까지 for (; ;) { //파일목록을 저장한 변수를 클라이언트에게 송신 //List 객체를 네트워크로 송신할 수 없기 때문에 //List 객체를 배열로 바꿔 송신함 formatter.Serialize(net_stream, file_list.ToArray()); //클라이언트가 보낸 데이터 수신 - 기능선택 int select = (int)formatter.Deserialize(net_stream); //조건문 - 클라이언트가 요청한 기능을 처리 if (select > 0)//다운로드 요청 { //사용자관점의 번호 -> 인덱스번호 select--; //해당 인덱스에 있는 파일정보를 통해 파일 읽기 모드로 접근 file_stream = File.OpenRead("./files/" + file_list[select].filename); //파일사이즈를 1024로 나눈만큼 반복 for (int i = 0; i < file_stream.Length / 1024f; i++) { //파일 읽기 및 네트워크에 송신 data_size = file_stream.Read(datas, 0, datas.Length); net_stream.Write(datas, 0, data_size); } //파일닫기 file_stream.Close(); } else if (select == 0)//업로드 요청 { //업로드할 파일의 정보를 수신 - File_info 객체 File_info new_fileinfo = (File_info)formatter.Deserialize(net_stream); //file_list 객체에 수신된 객체 추가 file_list.Add(new_fileinfo); //수신된 객체에 저장된 파일 이름으로 파일 생성 file_stream = File.Create("./files/" + new_fileinfo.filename); //클라이언트가 보낸 파일데이터를 수신 및 파일에 쓰기 for (int i = 0; i < new_fileinfo.filesize / 1024f; i++) { data_size = net_stream.Read(datas, 0, datas.Length); file_stream.Write(datas, 0, data_size); } //파일 접근 종료 file_stream.Close(); } else//연결종료 { break; } } net_stream.Close(); client.Close(); } listener.Stop(); }
static void Main(string[] args) { //서버연결 TcpClient client = new TcpClient("127.0.0.1", 11000); //반복문에서 사용할 파일 스트림, 바이트배열등 선언 byte[] datas = new byte[1024]; int data_size, i; NetworkStream net_stream = client.GetStream(); FileStream file_stream; BinaryFormatter formatter = new BinaryFormatter(); formatter.Binder = new AllowAllAssemblyVersionsDeserializationBinder(); //반복 - 연결을 종료하는 입력이 들어올때까지 for (; ;) { //파일목록을 수신 File_info[] file_list = (File_info[])formatter.Deserialize(net_stream); //반복 - 파일목록을 콘솔창에 출력 Console.WriteLine("번호\t\t파일명\t\t파일크기"); Console.WriteLine("-------------------------------------------------"); for (i = 0; i < file_list.Length; i++) { Console.WriteLine("{2}\t\t{0}\t\t{1}", file_list[i].filename, file_list[i].filesize, i + 1); } //다운로드/업로드 입력 받기 Console.Write("메뉴선택 다운로드(번호입력) 업로드(0입력) 종료(음수입력) : "); i = int.Parse(Console.ReadLine()); //조건문 -입력에 따른 코드 처리 if (i > 0) // 다운로드 { //서버에 사용자 입력을 송신 formatter.Serialize(net_stream, i); //사용자관점의 번호 -> 인덱스 번호로 변경 i--; //파일 생성 file_stream = File.Create("./" + file_list[i].filename); //반복 - 파일 사이즈 / 1024만큼 반복 for (int j = 0; j < file_list[i].filesize / 1024f; j++) { //네트워크의 데이터 수신 및 수신데이터를 파일에 쓰기 data_size = net_stream.Read(datas, 0, datas.Length); file_stream.Write(datas, 0, data_size); } //파일 종료 file_stream.Close(); Console.WriteLine("{0} 다운로드 완료", file_list[i].filename); } else if (i == 0) //업로드 { string path = ""; //업로드할 파일의 경로를 사용자 입력 받음 do { Console.Write("업로드할 파일을 입력 (확장자명포함): "); path = Console.ReadLine(); //파일열기 try { file_stream = File.OpenRead(path); break; } catch //사용자가 입력한 문자열을 통해 파일을 찾을 수 없는 경우 { Console.WriteLine("존재하지않는 파일입니다."); } } while (true); File_info new_info = new File_info(); //문자열.Split() : 매개변수로 들어간 문자열 단위로 분리시키는 정적함수 //파일경로에서 \\마지막 부분에 파일 이름, 확자자명, 문자열이 있으므로Split함수에서 반환되는 문자열의 마지막 인덱스 값을 파일 string[] splitstr = file_stream.Name.Split('\\'); string filename = splitstr[splitstr.Length - 1]; new_info.filename = filename; new_info.filesize = file_stream.Length; //사용자입력을 송신 formatter.Serialize(net_stream, i); //File_info 객체 송신 formatter.Serialize(net_stream, new_info); //업로드할 파일데이터 송신 for (i = 0; i < new_info.filesize / 1024f; i++) { data_size = file_stream.Read(datas, 0, datas.Length); net_stream.Write(datas, 0, data_size); } file_stream.Close(); } else //연결종료 { formatter.Serialize(net_stream, i); break; } } net_stream.Close(); client.Close(); }