2

スタックオーバーフローには関連する質問がいくつかありますが、私の状況が異なるか、状況に関連付けるにはあまりにも愚かです。誰かがこれで私を助けてくれることを願っています。さらに、私は .NET 開発者でさえないので、間違った用語の使用について事前にお詫び申し上げます。

私のシナリオは次のとおりです。.net アプリケーションを展開するために使用されるツール (ワンクリック?) は、フルネームが 300 文字を超えるディレクトリに配置します。アプリケーションは、サード パーティのコンポーネント (dbstore と呼びましょう) を使用して、アプリケーションの展開ディレクトリにある指定されたファイルを処理します。

これまではAssembly.GetExecutingAssembly().GetName().CodeBase、dbstore に渡すファイルの完全修飾名を作成するために を使用していました。しかし、dbstore は古いスタイルの API を使用しているため、ファイルを開こうとすると失敗します。

dbstore はすぐには変更されないことが予想されるため、アプリケーションの chdir をデプロイメント ディレクトリに移動し、現在のディレクトリ内の相対パス名をそれに渡すことをお勧めします。これは、C# コードで受け入れられた応答PathTooLongException で説明されているアプローチでもあります。

Directory.SetCurrentDirectoryただし、それもスローすることがわかりましたPathTooLongException。これは、UNC パス名を使用している場合でも発生します (例: で始まる名前)。\\?\0000000000000\...

私は根本的に間違ったことをしていますか?使用する別の機能はありますか?

編集:私が探しているものを達成する方法はないようです。私が知る限り、現在のディレクトリを長いパスに設定する方法はありません。

4

1 に答える 1

0

Environment.SetCurrentDirectory() を使用すると、同様の結果が得られますか?

その場合は、ディレクトリのサブフォルダーをサブフォルダーごとに変更することをお勧めします。

編集:
Windows は、実際にはファイル パス (WinXP) または 260 文字 (Vista) に対して 255 文字の制限を設定します。この制限はファイル システムには適用されないため、このような長いディレクトリ パスにファイルを保存することはできますが、Windows エクスプローラーや多くの Windows サービスはそのようなパスから読み取ることができません。

実際には、そのようなファイルにアクセスできないため、.NET フレームワーク メソッドも含まれているようです。独自のファイルシステム API を作成する必要があるかもしれませんが、それではオーバーヘッドが少し大きくなります。ファイルパスを短くすることはできませんか?Windows は、ファイルのアドレス指定を短縮する方法 (8 オクテットのファイル名など) を提供していますか?

ソース: http://labnol.blogspot.com/2006/10/limitations-with-long-file-names-on.html

于 2010-10-29T08:39:53.443 に答える