2016-04-13 10 views
0

hinzufügen Ich versuche, eine Strukturansicht zu erstellen, um nach einem Verzeichnis in einem Remote-Server mit FTP/SFTP-Verbindungen zu suchen, Was ich versuche Füllen der Baumansicht mit allen verfügbaren Verzeichnisse mit dem Home-Verzeichnis starten, wie das folgende Beispiel zu tun ist, beginnen:Wie konnte ich Knoten einer Baumansicht als Ordner aus einem Remote-Verzeichnis mit WinSCP und C#

Home---->SubFolder 
    | 
    |---->Another Folder 
    | 
    |---->MyOtherFolder 

Dann, wenn der Benutzer in jedem Ordner starten, klicken sie beginnen, ihre Verzeichnisse aus der Baumansicht angezeigt werden als das folgende Beispiel (Klicken in einen anderen Ordner):

Home ---->SubFolder 
    | 
    |---->Another Folder -------> MyFolder1 
    |     | -------> MyFolder2 
    | 
    |---->MyOtherFolder 

Ich versuche, diese Ordner zu bekommen, aber es ist eine Ausnahme zu werfen, ist es auch das Sammeln von Dateien, keine Ordner ....

dies den Code ist, dass ich ....

private void FillTree() 
{ 
    SessionOptions SessionOptions = new SessionOptions(); 
    Session MySession = new Session(); 

    SessionOptions.HostName = InterfaceValues[0]; 
    SessionOptions.UserName = InterfaceValues[2]; 
    SessionOptions.Password = InterfaceValues[3]; 
    SessionOptions.PortNumber = Convert.ToInt32(InterfaceValues[1]); 

    if (string.Compare(InterfaceValues[9], "FTP", true) == 0) 
     SessionOptions.Protocol = WinSCP.Protocol.Ftp; 
    else if (string.Compare(InterfaceValues[9], "SFTP", true) == 0) 
    { 
     SessionOptions.Protocol = WinSCP.Protocol.Sftp; 
     SessionOptions.SshPrivateKeyPath = InterfaceValues[12]; 
     SessionOptions.SshHostKeyFingerprint = InterfaceValues[10]; 
    } 

    try 
    { 
     MySession.Open(SessionOptions); 

     foreach (RemoteFileInfo info in MySession.EnumerateRemoteFiles("/", "*", EnumerationOptions.AllDirectories)) 
     { 
      if (info.IsDirectory) 
      tvRemoteDirectory.Nodes.Add(info.Name); 
     } 

    MySession.Close(); 
} 
catch (Exception ex) 
{ 
    MySession.Close(); 
    MessageBox.Show("Not possible to connect to " + InterfaceValues[0] + "\nError Message: " + ex.Message); 
     this.Close(); 
} 

die Ausnahme, die ich erhalte ist:

{WinSCP.SessionRemoteException: Error listing directory '/jpm_icl'. ---> WinSCP.SessionRemoteException: Permission denied. Error code: 3 Error message from server: Permission Denied!

Jede Idee, was ich an dieser Stelle tun könnte?

+1

Entweder die Berechtigung erhalten oder den Fehler ignorieren. – SLaks

+0

Ich versuchte es mit: 'RemoteDirectoryInfo RemoteDirectory = MySitzung.ListDirectory ("/"); foreach (RemoteFileInfo Dateiinfo in RemoteDirectory.Files) { //tvRemoteDirectory.Nodes.Add(fileinfo.Name); } ' aber es ruft". " und ".." und "jpm_icl" aber ich habe keine Ahnung was ist mit "jpm_icl", ich kann diesen Ordner nicht sehen –

+0

Wann bekommst du die Ausnahme? In der 'EnumerateRemoteFiles'-Schleife? Wo können Sie den Ordner 'jpm_icl' nicht sehen? –

Antwort

-1

Verwenden RadFileExplorer - Telerik ASP.NET FileExplorer

und diese Funktion vervollständigen Ihre Anforderungen FileExplorer - Show all items in the TreeView

Alle weiteren Key Features unter angegeben möchten Sie es

Von Telerik Sie diese Funktion für jede bekommen Plattform.

  • Eine einzige Steuerung, in Telerik.Web.UI integriert - bereit, auf der Seite

  • Verzeichnis Last auf Anfrage Laden mit ASP.NET 2.0 AJAX Callback-Mechanismus

  • per Drag & Drop
  • Clientseitige und Serverereignisse für Dateivorgänge

  • Verwendet die FileBrowserContentProvider-Abstraktion von RadEditor zum Anhängen an eine zugrunde liegende Datei le System wie OS, Datenbanken, MOSS Sharepoint, MCMS

  • Sortierung von Dateien und Ordnern

  • Kontextmenüs

  • Fähigkeit, zu Löschen und Umbenennen von Dateien und Ordnern

  • Fähigkeit, neue Ordner erstellen

  • Möglichkeit zum Aktivieren des Paging für das Raster, wenn die Ordner eine große Anzahl von Elementen enthalten (z. B.mehr als 200)

  • Fähigkeit, die neue Symbolleiste Schaltflächen

+0

Sorry, das ist für Fensterformulare nicht Web. –

1

Was ich tat, war das schnell zwischen Gitter und Miniaturansichten zu wechseln:

Listdirectory Funktion zum Abrufen alle Verzeichnisse, wie ich Ich möchte nicht das Verzeichnis "." und "." Ich muss es ausschließen.

RemoteDirectoryInfo RemoteDirectory; 

    if (RemoteDirectoryPath != "Home") 
      RemoteDirectory = MySession.ListDirectory(RemoteDirectoryPath); 
    else 
      RemoteDirectory = MySession.ListDirectory("/"); 
    if (tvRemoteDirectory.SelectedNode.Nodes.Count > 0) tvRemoteDirectory.SelectedNode.Nodes.Clear(); 

    foreach (RemoteFileInfo fileinfo in RemoteDirectory.Files) 
    {      
     if (fileinfo.IsDirectory) 
     { 
      if (fileinfo.Name != "." && 
       fileinfo.Name != "..") 
       {              
        TreeNode ChildNode = new TreeNode(); 
        ChildNode.Text = fileinfo.Name; 
        ChildNode.ImageIndex = 0;              
        tvRemoteDirectory.SelectedNode.Nodes.Add(ChildNode); 
        tvRemoteDirectory.ExpandAll(); 
       }   
     }      
    } 
Verwandte Themen