public int CompareTo(object obj) { IOElement item = (IOElement)obj; if (this.IsFile) { return(item.IsFile ? this.Name.CompareTo(item.Name) : 1); } else { return(!item.IsFile ? this.Name.CompareTo(item.Name) : -1); } }
public List <IOElement> ListFiles() { _checkConnected(); string answer = SendCommandReadAnswer("LIST"); string passiveAnswer = ReadAnswer(PassiveClient, "000", false).Trim(); //dispose passive objects PassiveClient.Close(); PassiveClient = null; PassiveClientReader.Close(); PassiveClientReader = null; if (answer.Contains("226") == false) { answer = ReadAnswer(); } List <IOElement> Files = new List <IOElement>(); if (passiveAnswer.Length == 0) { return(Files); } //detect os for file listing parsing int os = 0; string[] osHelper = passiveAnswer.Split('\n'); if (osHelper.Length > 0) { os = (osHelper[0][10] == ' ' && osHelper[0][9] != ' ') ? 0 : 1; } Files = ((OS & (OSType)os) == OSType.Windows) ? IOElement.ParseWindowsFiles(passiveAnswer) : IOElement.ParseLinuxFiles(passiveAnswer); Files.Sort(); return(Files); }
public async static Task <List <IOElement> > ParseWindowsFiles(string rawList, string path) { List <IOElement> files = new List <IOElement>(); foreach (string item in rawList.Trim().Split('\n')) { IOElement newElement = new IOElement(); string trimmedItem = item.Trim(); int timeEnding = 0; for (int i = 8; i < trimmedItem.Length; i++) { if (trimmedItem[i] != ' ') { for (int j = i; j < trimmedItem.Length; j++) { if (trimmedItem[i] == ' ') { timeEnding = j; break; } } } } newElement.LastEdit = trimmedItem.Substring(0, timeEnding).Trim(); while (newElement.LastEdit.Contains(" ")) { newElement.LastEdit = newElement.LastEdit.Replace(" ", " "); } int typeBeginning = 0; int typeEnding = 0; for (int i = 17; i < trimmedItem.Length; i++) { if (trimmedItem[i] != ' ') { typeBeginning = i; break; } } for (int i = typeBeginning; i < trimmedItem.Length; i++) { if (trimmedItem[i] == ' ') { typeEnding = i; break; } } newElement.FileType = trimmedItem.Substring(typeBeginning, typeEnding - typeBeginning).Replace("<DIR>", "Directory"); newElement.IsFile = newElement.FileType != "Directory"; int nameBeginning = 0; for (int i = typeEnding + 1; i < trimmedItem.Length; i++) { if (trimmedItem[i] != ' ') { nameBeginning = i; break; } } newElement.Name = trimmedItem.Substring(nameBeginning, trimmedItem.Length - nameBeginning); newElement.Path = path; //skip those entries if (newElement.Name == "." || newElement.Name == "..") { continue; } ulong size = 0; ulong.TryParse(newElement.FileType, out size); newElement.Size = size; if (size != 0) { newElement.FileType = newElement.Name.Split('.').Last(); } if (newElement.IsFile) { if (newElement.Name.Contains('.')) { newElement.FileType = newElement.Name.Substring(newElement.Name.LastIndexOf('.')); } else { newElement.FileType = newElement.Name; } } //set the icon string filename = "_tmp_ext" + newElement.Name.Split('.').Last(); Windows.Storage.StorageFile iconHelperFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); Windows.Storage.FileProperties.StorageItemThumbnail iconHelperThumbnail = await iconHelperFile.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem, 16, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail); if (iconHelperThumbnail != null) { BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(iconHelperThumbnail.CloneStream()); newElement.Icon = bitmapImage; } files.Add(newElement); } return(files); }
public static async Task <List <IOElement> > ParseLinuxFiles(string rawList, string path) { List <IOElement> files = new List <IOElement>(); foreach (string item in rawList.Trim().Split('\n')) { IOElement newElement = new IOElement(); string trimmedItem = item.Trim(); string tmp = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')).Trim(); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')); newElement.IsFile = tmp.StartsWith("d") ? false : true; int ownerNumber = 0; int groupNumber = 0; int publicNumber = 0; if (tmp[1] == 'r') { ownerNumber += 4; } if (tmp[2] == 'w') { ownerNumber += 2; } if (tmp[3] == 'x') { ownerNumber += 1; } if (tmp[4] == 'r') { groupNumber += 4; } if (tmp[5] == 'w') { groupNumber += 2; } if (tmp[6] == 'x') { groupNumber += 1; } if (tmp[7] == 'r') { publicNumber += 4; } if (tmp[8] == 'w') { publicNumber += 2; } if (tmp[9] == 'x') { publicNumber += 1; } newElement.Rigths = ownerNumber * 100 + groupNumber * 10 + publicNumber; newElement.RigthsString = newElement.Rigths.ToString(); trimmedItem = trimmedItem.Trim(); string trash = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Owner = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Group = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Size = ulong.Parse(trimmedItem.Substring(0, trimmedItem.IndexOf(' '))); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.LastEdit = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.LastEdit += "." + trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.LastEdit += "." + trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Name = trimmedItem; newElement.Path = path; //skip those entries if (newElement.Name == "." || newElement.Name == "..") { continue; } if (newElement.IsFile == false) { newElement.FileType = "Directory"; } else { if (newElement.Name.Contains(".")) { newElement.FileType = newElement.Name.Substring(newElement.Name.LastIndexOf('.')); } else { newElement.FileType = newElement.Name; } } //set the icon if (newElement.IsFile) { string filename = "_tmp_ext" + "." + newElement.Name.Split('.').Last(); Windows.Storage.StorageFile iconHelperFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); Windows.Storage.FileProperties.StorageItemThumbnail iconHelperThumbnail = await iconHelperFile.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem, 64, Windows.Storage.FileProperties.ThumbnailOptions.ResizeThumbnail); if (iconHelperThumbnail != null) { try { await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(iconHelperThumbnail.CloneStream()); newElement.Icon = bitmapImage; }); } catch (Exception ex) { } } } files.Add(newElement); } return(files); }
public async Task <List <IOElement> > ListFiles(string absoluteDirectoryName) { checkConnected(); IsIdled = false; if (_dataChannelSocket == null) { if (EnterPassiveModeAutomatic) { await EnterPassiveMode(); } } string answer; if (!TrySendCommandReadAnswer("LIST " + absoluteDirectoryName, out answer)) { return(null); } if (answer == null) { return(null); } string passiveAnswer = string.Empty; try { passiveAnswer = ReadAnswer(ClientType.PassiveClient, false, false).Trim(); } catch (IOException) { throw; } //dispose passive objects _dataChannelSocket.Dispose(); _dataChannelSocket = null; _dataChannelSocketReader = null; _dataChannelSocketWriter = null; _dataChannelSocketTlsProtocolHandler = null; IsIdled = true; if (answer.Contains("226") == false) { try { answer = ReadAnswer(ClientType.ActiveClient); } catch (IOException) { throw; } } List <IOElement> files = new List <IOElement>(); if (passiveAnswer.Length == 0) { return(files); } //detect os for file listing parsing int os = 0; string[] osHelper = passiveAnswer.Split('\n'); if (osHelper.Length > 0) { os = (osHelper[0][10] == ' ' && osHelper[0][9] != ' ') ? 0 : 1; } //set absoluteDirectoryName to CurrentWorkingDirectory if it is not specified if (absoluteDirectoryName == string.Empty) { absoluteDirectoryName = CurrentWorkingDirectory; } files = ((_parentClient.OS & (OSType)os) == OSType.Windows) ? await IOElement.ParseWindowsFiles(passiveAnswer, absoluteDirectoryName) : await IOElement.ParseLinuxFiles(passiveAnswer, absoluteDirectoryName); files.Sort(); return(files); }
public static List <IOElement> ParseWindowsFiles(string rawList, bool addCurrentDirectory = true, bool addParentDirectory = true) { List <IOElement> files = new List <IOElement>(); foreach (string item in rawList.Trim().Split('\n')) { IOElement newElement = new IOElement(); string trimmedItem = item.Trim(); int timeEnding = 0; for (int i = 8; i < trimmedItem.Length; i++) { if (trimmedItem[i] != ' ') { for (int j = i; j < trimmedItem.Length; j++) { if (trimmedItem[i] == ' ') { timeEnding = j; break; } } } } newElement.LastEdit = trimmedItem.Substring(0, timeEnding).Trim(); while (newElement.LastEdit.Contains(" ")) { newElement.LastEdit = newElement.LastEdit.Replace(" ", " "); } int typeBeginning = 0; int typeEnding = 0; for (int i = 17; i < trimmedItem.Length; i++) { if (trimmedItem[i] != ' ') { typeBeginning = i; break; } } for (int i = typeBeginning; i < trimmedItem.Length; i++) { if (trimmedItem[i] == ' ') { typeEnding = i; break; } } newElement.FileType = trimmedItem.Substring(typeBeginning, typeEnding - typeBeginning).Replace("<DIR>", "Directory"); newElement.IsFile = newElement.FileType != "Directory"; int nameBeginning = 0; for (int i = typeEnding + 1; i < trimmedItem.Length; i++) { if (trimmedItem[i] != ' ') { nameBeginning = i; break; } } newElement.Name = trimmedItem.Substring(nameBeginning, trimmedItem.Length - nameBeginning); ulong size = 0; ulong.TryParse(newElement.FileType, out size); newElement.Size = size; if (size != 0) { newElement.FileType = newElement.Name.Split('.').Last(); } if (newElement.Name == ".") { addCurrentDirectory = false; } if (newElement.Name == "..") { addParentDirectory = false; } if (newElement.IsFile) { if (newElement.Name.Contains('.')) { newElement.FileType = newElement.Name.Substring(newElement.Name.LastIndexOf('.')); } else { newElement.FileType = newElement.Name; } } files.Add(newElement); } if (addCurrentDirectory) { IOElement newElement = new IOElement(); newElement.Name = "."; newElement.FileType = "Directory"; newElement.IsFile = false; newElement.Size = 2048; files.Add(newElement); } if (addParentDirectory) { IOElement newElement = new IOElement(); newElement.Name = ".."; newElement.FileType = "Directory"; newElement.IsFile = false; newElement.Size = 2048; files.Add(newElement); } return(files); }
public static List <IOElement> ParseLinuxFiles(string rawList, bool addCurrentDirectory = true, bool addParentDirectory = true) { List <IOElement> files = new List <IOElement>(); foreach (string item in rawList.Trim().Split('\n')) { IOElement newElement = new IOElement(); string trimmedItem = item.Trim(); string tmp = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')).Trim(); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')); newElement.IsFile = tmp.StartsWith("d") ? false : true; int ownerNumber = 0; int groupNumber = 0; int publicNumber = 0; if (tmp[1] == 'r') { ownerNumber += 4; } if (tmp[2] == 'w') { ownerNumber += 2; } if (tmp[3] == 'x') { ownerNumber += 1; } if (tmp[4] == 'r') { groupNumber += 4; } if (tmp[5] == 'w') { groupNumber += 2; } if (tmp[6] == 'x') { groupNumber += 1; } if (tmp[7] == 'r') { publicNumber += 4; } if (tmp[8] == 'w') { publicNumber += 2; } if (tmp[9] == 'x') { publicNumber += 1; } newElement.Rigths = ownerNumber * 100 + groupNumber * 10 + publicNumber; newElement.RigthsString = newElement.Rigths.ToString(); trimmedItem = trimmedItem.Trim(); string trash = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Owner = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Group = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Size = ulong.Parse(trimmedItem.Substring(0, trimmedItem.IndexOf(' '))); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.LastEdit = trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.LastEdit += "." + trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.LastEdit += "." + trimmedItem.Substring(0, trimmedItem.IndexOf(' ')); trimmedItem = trimmedItem.Remove(0, trimmedItem.IndexOf(' ')).Trim(); newElement.Name = trimmedItem; if (newElement.Name == ".") { addCurrentDirectory = false; } if (newElement.Name == "..") { addParentDirectory = false; } if (newElement.IsFile == false) { newElement.FileType = "Directory"; } else { if (newElement.Name.Contains(".")) { newElement.FileType = newElement.Name.Substring(newElement.Name.LastIndexOf('.')); } else { newElement.FileType = newElement.Name; } } files.Add(newElement); } if (addCurrentDirectory) { IOElement newElement = new IOElement(); newElement.Name = "."; newElement.FileType = "Directory"; newElement.IsFile = false; newElement.Size = 2048; files.Add(newElement); } if (addParentDirectory) { IOElement newElement = new IOElement(); newElement.Name = ".."; newElement.FileType = "Directory"; newElement.IsFile = false; newElement.Size = 2048; files.Add(newElement); } return(files); }