title: How to zip files with relative path
body: <p>I'm trying to write a little backup-tool in C#. The files I want to backup (and zip) are stored like this:</p>
  
  <p>c:\1\2\3\files\backupfile1.txt
  c:\1\2\3\files\backupfile2.txt</p>
  
  <p>but also like this:</p>
  
  <p>c:\1\2\3\files\1\backupfile3.txt</p>
  
  <p>The user has to specify the path "C:\1\2\3". My program now searches through all subdirectories and puts it in an array. After that, it displays a list of all entries in a list with checkboxes. The user then has to check which files he wants to save.
  When the "Save" button is pressed, all checked files are stored in a zip-file but with full pathnames. This is a problem when I want to restore them on another system, because the folders can be different. The destination could look like this:</p>
  
  <p>C:\1\files\backupfile1.txt
  C:\1\files\1\backupfile3.txt</p>
  
  <p>So my problem is, that I have to store only part of the folders in the zip, relative to the path the user has to specify. Since I have only very little experience with complex programs like this, I'm lost.
  I have seen that it is possible to split a string. I thought that it might be possible to read all files and before zipping them, split the path at every \ and delete every part before the "files" directory and then zip everything with this split directory, but I can't figure out how.
  Is this possible or is there an easier way to do this?
  Important is that the folder structure after the "files"-folder has to stay intact.</p>
  
  <p>EDIT:
  The function to display the checkbox list looks like this:</p>
  
  <pre><code>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 &lt; 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);
              }
          }
  </code></pre>