无法从外部设备获取目录

时间:2015-10-25 15:50:04

标签: c#

我试图从Android手机上的文件夹中获取项目。

然而,FolderBrowserDialog不允许我从手机中选择一个文件夹。路径看起来像This PC\Xperia Z3 Compact\SD Card\Music

选择我目前正在使用的文件夹:

private void button_Click(object sender, EventArgs e)
{
    System.Windows.Forms.FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog();
    if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        UserFolderLocation = dlg.SelectedPath;
    }
    else { }
}

然后在搜索文件夹中查找其内容时,我使用:

try
{
    folderItems = Directory.GetFiles(directory).Select(f => Path.GetFileNameWithoutExtension(f)).ToArray();
}
catch (Exception e)
{
    MessageBox.Show(e.ToString());
}

如果我将路径This PC\Xperia Z3 Compact\SD Card\Music作为变量插入然后搜索它,则会抛出System.IO.DirectoryNotFoundException

如何选择和使用不以c:d:等开头的路径?

2 个答案:

答案 0 :(得分:3)

最后我最终使用了shell32库。它具有处理便携式设备的能力(包括并且不包括驱动器号)。

包括shell32.dll的参考 并包括图书馆:

using Shell32;

然后我使用shell浏览文件夹而不是使用FolderBrowserDialog。这为手机上的文件夹返回一条奇怪的路径,因为我用来测试路径的手机如下所示: ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_04e8&pid_6860&ms_comp_mtp&samsung_android#6&fee689d&3&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\SID-{20002,SECZ9519043CHOHB01,63829639168}\{013C00D0-011B-0130-3A01-380113012901}

public int Hwnd { get; private set; }

private void button3_Click(object sender, EventArgs e)
{
    Shell shell = new Shell();
    Folder folder = shell.BrowseForFolder((int)Hwnd, "Choose Folder", 0, 0);     
    if (folder == null)
    {
        // User cancelled
    }
    else
    {             
        FolderItem fi = (folder as Folder3).Self;
        UserFolderLocation = fi.Path;
    }
}

然后选择在文件夹中搜索其内容:

try
{
    Folder dir = shell.NameSpace(directory);

    List<string> list = new List<string>();
    foreach (FolderItem curr in dir.Items())
    {
        list.Add(curr.Name);
    }
    folderItems = list.ToArray();
}
catch (Exception e)
{
    MessageBox.Show(e.ToString());
}

答案 1 :(得分:0)

“此PC”仅供用户使用 - 在内部根本不使用。您可以通过在Windows资源管理器中应用第一个标记设置来亲眼看到 screenshot

此外,Windows会为每个本地设备分配一个驱动器号 - 默认情况下它不显示。 (使用第二个标记设置进行检查)

所以实际上你必须使用(假设你的手机被分配了驱动器F:)类似F:\SD Card\Music\

可能相关:Get List Of Connected USB Devices关于在不知道分配的驱动器号的情况下查找设备的能力。