2016-08-31 5 views
0

My Goalを使用するフォルダ全体とそのフォルダ内のすべてが月より古いものを削除します。以下は、私が書いたコードです:C言語でDirectoryInfo.Delete(true)メソッドを使用して256文字を超えるパスを削除する

foreach (String dir in Directory.EnumerateDirectories(args[0])) 
{ 
    foreach (String subDir in Directory.EnumerateDirectories(dir)) 
    { 
     DirectoryInfo dirInfo = new DirectoryInfo(subDir); 
     if (dirInfo.CreationTime < DateTime.Today.AddMonths(-1)) 
     { 
      try 
      { 
       dirInfo.Delete(true); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
     } 
    } 
} 

Isssue:パスが256文字を超えて、およびフォルダを削除していない場合dirInfo.Delete(真)ステートメントは、例外がスローされます。どのように私はそれを来ることができますか? ありがとう

+3

[.NET 4.6.2には長いパスサポートが追加されました](https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2 /)、アップグレードが可能な場合。 –

+0

私は実際にターゲットフレームワークを.NET Framework 4.6.1に変更しようとしました。そして、それはまだ動作しません。私は4.6.2をインストールすることができないと思います。 – Sagar0921

+2

4.6.1ではなく4.6.2で修正されました。投稿した添付リンクを参照してください。 –

答えて

2

最初にフォルダを短いディレクトリパスに移動してから、パスの長さが長くなるようにしてから削除してみてください。

dirInfo.MoveTo("C:\temp"); 
dirInfo.Delete(true); 
+0

ありがとう、今はうまくいくようですね! – Sagar0921

+1

パスが長すぎる場合にのみ役立ちますが、ファイル名がそうでない場合には役立ちます。 – TaW

+0

はい、あなたは正しいです。私はDirectoryNotFoundExceptionをキャッチし、キャッチブロック内に別のCatchブロックを追加しました。私はmoveToコマンドを使用していて、削除しようとしています。そしてそれは正常に動作するようです。 catch(DirectoryNotFoundException) { dirInfo.MoveTo(@ "c:\ TempTCCleanUp"); dirInfo.Delete(true); } – Sagar0921

関連する問題