如何用相对路径压缩文件

本文关键字:压缩 文件 路径 相对 何用 | 更新日期: 2023-09-27 18:29:23

我正在尝试用C#编写一个小备份工具。我想备份的文件(和zip)是这样存储的:

c: ''1''2''3''files''backupfile1.txtc: ''1''2''3''files''backupfile2.txt

但也像这样:

c: ''1''2''3''files''1''backupfile3.txt

用户必须指定路径"C:''1''2''3"。我的程序现在搜索所有子目录,并将其放入一个数组中。之后,它会显示一个包含复选框的列表中所有条目的列表。然后用户必须检查他想要保存的文件。当按下"保存"按钮时,所有选中的文件都存储在一个zip文件中,但具有完整的路径名。当我想在另一个系统上恢复它们时,这是一个问题,因为文件夹可能不同。目的地可能是这样的:

C: ''1''files''backupfile1.txtC: ''1''files''1''backupfile3.txt

因此,我的问题是,相对于用户必须指定的路径,我只能在zip中存储部分文件夹。由于我对这种复杂的程序只有很少的经验,我迷失了方向。我已经看到了把绳子分开是可能的。我认为可以读取所有文件,在压缩它们之前,在"files"目录之前的每个''处分割路径,删除每个部分,然后用这个分割目录压缩所有文件,但我不知道怎么做。这可能吗?或者有更简单的方法吗?重要的是,文件夹结构后的"文件"文件夹必须保持完整。

编辑:显示复选框列表的功能如下所示:

private void bt_aktualisieren_Click(object sender, EventArgs e)
        {
            string folder = Properties.Settings.Default.folder;
            string[] directories = folder.Split(Path.DirectorySeparatorChar);
            bool temp = false;
            for (int i = 0; i < directories.Count(); i++)
            {
                if (directories[i] == "files")//files is your Directory with files and subdirs which you want to backup
                    temp = true;
            }
            if (temp == true)
            {
                string[] files = (from f in Directory.GetFiles(@folder += "''backup", "*", SearchOption.AllDirectories)
                                    where f.EndsWith(".txt")
                                    select f).ToArray();
                                    checkedListBox1.Items.AddRange(files);
            }
        }

如何用相对路径压缩文件

您可以使用分割路径

string[] directories = path.Split(Path.DirectorySeparatorChar);

然后,您可以检查数组中的"文件文件夹",并且"文件文件夹"之后的所有目录名都可以在您的文件名中。

编辑:

样本-未测试

string mypath = c:'1'2'3'files'backupfile1.txt
string[] directories = mypath.Split(Path.DirectorySeparatorChar);
directories[0] = C:
directories[1] = 1
direcotries[2] = 2

等等…

bool temp = false;
for(int i = 0; i<directories.Count(); i++)
{
   if(directories[i] == "files")//files is your Directory with files and subdirs which you want to backup
      temp = true;
   }
   if(temp == true)
   {
      // ADD directories[i] to checkbox list
   }
}