-4

次のルールに従うランダムなフォルダー (多かれ少なかれ 10.000 フォルダーのシナリオ) を選択する必要があるソフトウェアを C# で開発しようとしています。

  1. ファイルを含むもののみを選択します。
  2. 選択したフォルダのサイズが 8GB の場合、ソフトウェアは選択を停止する必要があります。
  3. 単一のフォルダーをコピーするときは、そのフォルダーのパス全体を保持する必要があります (c:\folder\temp\hello がコピーされた場合、d:\COPIED\folder\temp\hello を保持したい)。

私は次のようなことをすると思います:

  1. 割り当てられたルートから始まるフォルダーのリスト全体を分析します。
  2. このリストでランダムな「行」を選択し、「選択されたリスト」に移動してサイズを数えます。
  3. 8GB に達したら、この最初のフェーズを停止し、コピーを開始します。

ここは大きな問題ではないと思います。についてどう思いますか?助言がありますか?

私の本当の問題は、移動するときに各フォルダーのパス全体を「再作成」することです。どうすればいいですか?C# API を使用して各レベルのフォルダーを作成しますか、または回避策はありますか?

4

1 に答える 1

1

では、最後の段落が質問ですか。私は次のように理解しています。

ソースと同じパスを含むがルートが異なる新しいパスを作成する方法は?

次に、Pathクラスとその静的メソッドを使用String.Substringして、新しいパスを取得できます。

D:\Copiedで使用するルート宛先フォルダですPath.Combine。次に、ルートフォルダーなしで古いパスを追加する必要があります(これにはメソッドがありませんPath。使用しますSubstring):

var rootDest = @"D:\Copy";                                  // your root directory
var pathSource = @"C:\Test\Test.txt";                       // a sample file
var root = Path.GetPathRoot(pathSource);                    // C:\
var oldPathWithoutRoot = pathSource.Substring(root.Length); // Test\Test.txt
var newPath = Path.Combine(rootDest, oldPathWithoutRoot);   // D:\Copy\Test\Test.txt

次にFile.Copy、フォルダー内のすべてのファイルを古いパスから新しいパスにコピーするために使用します。

ディレクトリが存在するかどうかを確認し、存在しない場合は作成する必要があります。

var targetDir = Path.GetDirectoryName(newPath);
if (!Directory.Exists(targetDir))
{
    Directory.CreateDirectory(targetDir);                   // D:\Copy\Test
}
File.Copy(pathSource, newPath);
于 2013-04-17T08:09:08.550 に答える