在功能C#中使用列表框中的项目

时间:2017-07-21 18:53:28

标签: c#

我列出了列表框中的所有目录。

private void Form1_Load_1(object sender, EventArgs e)
{
      listBox3.Items.Clear();
      string[] dirs = Directory.GetDirectories("C:\\Users\\foo\\Desktop\\test");

      foreach (string dir in dirs)
      {
        listBox3.Items.Add(dir);
      }
}

我需要对所有列表框项执行一个函数。喜欢这个

Listbox.Items = foo;
encrypt(foo);

我在很多方面都尝试过,但我没有得到任何东西。

始终返回无法将项目从列表框转换为字符串的错误。我是怎么做到的?

我正在做一个学校项目,老师告诉我们要创建与隐私有关的东西,我正在研究一种带AES算法的SHA256加密算法,程序用户选择一个想要保持匿名的文件夹,选择一个passowrd并加密文件夹,只是用相同的密码可以解密文件夹,我的程序做得不好,如果我只选择一个文件夹,它只加密该文件夹中的文件,仅此而已,但传统上有人想要加密他们的文件是因为他们有很多,可能被组织成文件夹,因此我的问题,我需要程序列出所有文件夹和子文件夹,并逐个加密文件。

1 个答案:

答案 0 :(得分:0)

您可以使用ListBox方法(需要Linq:Cast)将using System.Linq;中的项目作为字符串列表进行检索。然后,您可以将它们传递给可以处理它们的方法:

List<string> directoryPaths = listBox3.Items.Cast<String>().ToList();

// Assuming you have a method that takes a list of strings:
EncryptDirectories(directoryPaths);

上面的方法需要List<string>,在这种情况下,它是列表框中的所有项目。然后它可以遍历列表中的每个项目并逐个加密。在此示例中,它将每个项目传递给另一个执行单个目录实际加密的方法:

// Encrypts all files in all the directories (and their sub directories)
private static void EncryptDirectories(List<string> directoryPaths)
{
    if (directoryPaths == null) return;

    foreach (var directoryPath in directoryPaths)
    {
        EncryptDirectoryFiles(new DirectoryInfo(directoryPath));
    }
}

// Encrypts all files in the specified directory and it's sub directories
private static void EncryptDirectoryFiles(DirectoryInfo directory)
{
    if (directory == null) return;

    if (directory.Exists)
    {
        foreach (var file in directory.EnumerateFiles())
        {
            // Pseudo encryption of file by adding an unknown extension
            File.Move(file.FullName, file.FullName + ".encrypted");
        }

        // Recursively process any sub-directories
        foreach(var subDirectory in directory.EnumerateDirectories())
        {
            EncryptDirectoryFiles(subDirectory);
        }
    }
}