問題タブ [max-path]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 有効なパスの File.Delete での System.IO.DirectoryNotFoundException
すべての構造を持つフォルダーを再帰的に削除するコードを作成しました。
から取得System.IO.DirectoryNotFoundException
しFile.Delete
た有効なファイル名を取得しましたDirectory.GetFiles(path)
。以前に追加File.Exists
したところ、ファイルが存在しないか、エクスプローラーで表示できることがわかりました。
私はそれがうまくいくSHFileOperation
はずだと知っています。しかし、ネイティブ C# を使用したいと思います (直接の Windows API ではありません)。
赤: Windows 10 で .NET 4.6.2 と長いパスを設定し、ローカル グループ ポリシー エディターで [Win 32 の長いパスを有効にする] を有効にします。
.NET Framework 4.7.2 を使用しています。
私のコードの何が問題なのか誰か教えてもらえますか? または、それを機能させるために何ができますか?
エラーのパスは次のとおりです。
「E:\CobianBackupOld\cn1629\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\AppIconCache\100\{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}_Microsoft Visual Studio 9_0_Application_PreEmptive Solutions_Dotfuscator Community Edition_dotfuscator_exe」
私はそのファイルの所有者です (ファイルを削除する権限があります)。
アップデート
エラーを部分的に修正しましたが、適切に修正する方法を知りたいです (最近のフレームワークは長いパスをサポートしていると思われますか???)。私の実際の修正は、再帰関数の開始時にそのコードを追加することです
更新 2 直接関係はありませんが... 重要な点を説明したいのですが、C# File.Delete または Directory.Delete は読み取り専用のファイルまたはフォルダーを削除しません。削除する前に、アクセス許可を通常に変更する必要があります。そうしないと、アクセス権が取得されます。拒否エラー。
参考までに、私のコードは次のとおりです。
c# - Windows 10 の最大パス長の制限
私は、以前の何人かと同じように、最大パス長の制限に混乱しています。robocopy と新しい Windows 10 マシンを使用して、ファイルのツリーを NAS に正常に転送しました。
ソース マシンでは、すべてのファイルが 260 文字の制限内でした。これらは、robocopy を使用して、パス e: からパス \nas-3tb-backup\Public\Save_2019 にコピーされました。その後、小さな C# プログラムで確認したかったのですが、うまくいきません。FileInfo と File.OpenRead の両方が、NAS 名による拡張パスを持つファイルを見つけることができません。メモ帳、Visual Studio Code、Windows エクスプローラーなどのすべてのプログラムで、このファイルを問題なく表示または開くことができます。ここに示されているプレフィックス \\?\ を使用しようとしました: https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maxpathしかし、\\?\\\nas-3tb-backup---- の試行は失敗しました。リンクされた記事には、レジストリが変更されたときにパスを拡張するためのヒントがまだあります。これを回避したいのは、すべての Windows コンピューターを変更する必要があり、Windows 自体のプログラムがレジストリのハッキングなしで動作するため、可能であるはずだからです。