2

現在、フォルダー構造をディレクトリにコピーするプログラムを作成しようとしています。

以下に例を示します
C:\test1\folder\folder\file.txtC:\test2\folder\folder\file.txt

Source-FolderがList<FileSystemInfoあり、ファイルをコピーして、例のようにフォルダーを作成する必要があります。

ファイル名が 260 文字に制限されているため、パス名文字列なしでこれを行いたいと思います。

パス名を使用してファイルをコピーする次のコードがあります。

string destFile = BackupOptions.DestinationFolder + sourceFileInfo.FullName;
string destParent = Directory.GetParent(destFile).FullName;
string backupFolder = destParent + @ "\backupFolder";
try {
 while (!Directory.Exists(destParent)) {
  if (!Directory.Exists(destParent)) {
   Directory.CreateDirectory(destParent);
  }
 }
 FileAttributes fileAttributes = sourceFileInfo.Attributes;
 if ((fileAttributes & FileAttributes.Directory) == FileAttributes.Directory) {
  Directory.CreateDirectory(destFile);
 } else {
  FileInfo file = (FileInfo) sourceFileInfo;
  file.CopyTo(destFile, true);
 }
} catch (Exception e) {
 Console.Write(e.Message);
 return false;
}

そのファイル/オブジェクトの FileSystemInfo-Object だけでファイル/ディレクトリをコピーする方法を誰かが知っていますか?

4

1 に答える 1

1

現在、ロング パスをサポートする .NET IO クラスはないと思います。私が知っていることを回避する方法はありません。.NET 4.0 の時間枠で、チームはそれを追加しようと公に試みましたが、上陸することはありませんでした。

検索エンジンを使用して、これを追加するライブラリを見つけてください。ライブラリは内部的に PInvoke を使用します (もちろん、利便性は劣りますが直接使用することもできます)。AlphaFS は既知の名前だと思います。

コードを簡素化できます。Directory.CreateDirectory同時に複数のレベルを作成し、ディレクトリが既に存在する場合でも失敗しません。これは、ほとんどの場合、必要なものです。

次に、オブジェクトの親フォルダー文字列でそれを使用し、宛先フォルダーにディレクトリを作成します

あなたが何を意味するのか100%確信が持てませんが、それは正しいかもしれません:)

于 2016-06-17T10:05:45.390 に答える