2009-08-12 5 views
4

サーバの共有フォルダからローカルマシンにディレクトリツリー全体をコピーしようとしていますが、Best way to copy the entire contents of a directory in C#というポストが見つかりましたが、DirectoryInfoはネットワーク共有をサポートしていません。このコードを変更して、ネットワーク共有をソースとして使用できますか?ネットワークから共有ディレクトリ全体をコピーする

public static void CopyFilesRecursively(DirectoryInfo source, DirectoryInfo target) { 
    foreach (DirectoryInfo dir in source.GetDirectories()) 
     CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name)); 
    foreach (FileInfo file in source.GetFiles()) 
     file.CopyTo(Path.Combine(target.FullName, file.Name)); 
} 

EDIT
と通話が

CopyFilesRecursively(new DirectoryInfo ("\\192.168.0.11\Share"), new DirectoryInfo ("D:\Projects\")); 

と、エラーメッセージに

Could not find a part of the path 'D:\192.168.0.11\Share'. 

おかげで多くのことを得ることです!

答えて

3

文字列をエスケープするのはどうですか?

CopyFilesRecursively(
    new DirectoryInfo(@"\\192.168.0.11\Share"), 
    new DirectoryInfo(@"D:\Projects\")); 

MSDNには、共有のためのDirectoryInfo can handle UNC paths

+0

ありがとうと言います!これは私のために働く! –

0

代わりに、フォルダのuncパスを関数に渡すことはできますか? \\servername\physical path to folder

0

UNCパスをサポートしていない場合は、ネットワーク共有をドライブ文字にマップできます。ユーザーが指定した共有に対してこれを行う必要がある場合は、あまり移植されません。 1つのシェアに集中する必要があるだけであれば機能します。

XP上の

:[マイコンピュータ] - > [ツール] - > [ネットワークドライブの割り当ても

1

、試してみてください。

DirectoryInfo di=new DirectoryInfo(@"\\<server>\<share>"); 

具体的なポイントは、@記号であること。私のローカルネットワーク上で動作します。