作成日: 2026/05/29 最終更新日: 2026/05/29
文書種別
不具合
状況
回避方法あり
詳細
全角文字を 28 文字以上含む RPX ファイルを読み込む際、以下の例外が発生する場合があります。
System.IO.PathTooLongException: 指定されたパス、ファイル名、またはその両方が長すぎます。 完全限定型名は 260 文字未満で指定し、ディレクトリ名は 248 未満で指定してください。
本事象は、実際のパス全体の長さが制限に達していない場合でも発生することがあります。
バージョン 20.0J では、Linux 環境への対応に伴い、RPX ファイルの読み込み時にパスを URI 形式へ変換する仕様となっています。
この際、日本語などの全角文字は URL エンコードされるため、1 文字あたりが複数文字へ変換されます。
その結果、内部的な文字列長が増加し、URL エンコード後のファイル名(拡張子を含む)が一定長を超えた場合に PathTooLongException が発生します。
補足:
・本事象は、見た目のパス全体の長さそのものには依存しません
・Windows のパス長制限(MAX_PATH)および各要素の文字数制限に加え、URL エンコードによる内部的な文字列長増加が影響します
参考:
https://learn.microsoft.com/ja-jp/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
回避方法
読み込み時のみ一時的に短いファイル名へコピーし、その一時ファイルを読み込むことで回避可能です。
try
{
// 一時ファイルへコピー
var tempFileName = Path.Combine(Application.StartupPath, "tmp.rpx");
File.Copy(fileName, tempFileName, true);
// 一時ファイルを読み込む
designer1.LoadReport(new FileInfo(tempFileName));
}
catch (Exception ex)
{
// エラーハンドリング
}保存時は、一時ファイルではなく元のファイル(fileName)に対して保存処理を実行してください。
そのため、読み込み直後ではなく、上書き保存時や終了時の保存処理のタイミングで元ファイルへ書き戻すよう実装することを推奨します。
補足:
一時ファイル(tmp.rpx)は読み込み専用として使用し、保存処理は行わないでください