Извините за предыдущий код это все еще имело ошибки: ((стал жертвой самой быстрой проблемы оружия). Здесь это тестируется и работа. Ключом является SearchOption. AllDirectories, который избавляет от необходимости явную рекурсию.
string path = "C:\\a";
string[] dirs = Directory.GetDirectories(path, "*.*", SearchOption.AllDirectories);
string newpath = "C:\\x";
try
{
Directory.CreateDirectory(newpath);
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
}
for (int j = 0; j < dirs.Length; j++)
{
try
{
Directory.CreateDirectory(dirs[j].Replace(path, newpath));
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
}
}
string[] files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
for (int j = 0; j < files.Length; j++)
{
try
{
File.Copy(files[j], files[j].Replace(path, newpath));
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
}
}
Я думаю, вы спрашиваете, действуют ли HashMaps в Java и HashTables в C # примерно одинаково, и вы в целом правы с точки зрения производительности. Насколько я помню, HashMaps не жалуются, если вы вставляете повторяющиеся ключи, тогда как HashTable в C # будет.
По умолчанию .NET хэш-таблицы не синхронизированы, но вы можете создать синхронизированную обертку вокруг одной, например:
Hashtable myHash = Hashtable.Synchronized(new Hashtable());