C# 如何使用相对路径压缩文件
我正在尝试用C编写一个小的备份工具。我要备份和压缩的文件存储如下:C# 如何使用相对路径压缩文件,c#,dotnetzip,C#,Dotnetzip,我正在尝试用C编写一个小的备份工具。我要备份和压缩的文件存储如下: private void bt_aktualisieren_Click(object sender, EventArgs e) { string folder = Properties.Settings.Default.folder; string[] directories = folder.Split(Path.DirectorySeparatorChar);
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);
}
}
c:\1\2\3\files\backupfile1.txt
c:\1\2\3\files\backupfile2.txt
但也像这样:
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);
}
}
c:\1\2\3\files\1\backupfile3.txt
用户必须指定路径C:\1\2\3。我的程序现在搜索所有子目录并将其放入数组中。之后,它会显示一个带有复选框的列表中所有条目的列表。然后,用户必须检查要保存的文件。
按下“保存”按钮时,所有选中的文件都存储在zip文件中,但具有完整路径名。当我想在另一个系统上还原它们时,这是一个问题,因为文件夹可能不同。目标可能如下所示:
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);
}
}
C:\1\files\backupfile1.txt
C:\1\files\1\backupfile3.txt
所以我的问题是,相对于用户必须指定的路径,我只能在zip中存储部分文件夹。因为我对这样复杂的程序只有很少的经验,所以我迷路了。
我已经看到可以拆分字符串。我认为可以读取所有文件并在压缩它们之前,在每个\处分割路径,删除文件目录之前的每个部分,然后使用此分割目录压缩所有文件,但我不知道如何进行。
这是可能的还是有更简单的方法?
重要的是,文件夹结构后的文件文件夹必须保持完整
编辑:
显示复选框列表的函数如下所示:
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
}
}
这听起来很完美!你能举个例子吗?我对所有这一切都很陌生…这看起来不错,但我遇到了一个小问题:错误1运算符“哦,是错过了后面的“.Count”,因为Enumerable.Count是一个方法。它看起来很有希望,但遗憾的是复选框列表保持为空: