-2

以下のコード サンプルに異なるファイル名を渡していると、以下のようなエラーが発生します。しかし、同じデータの場合、私の側では問題なく動作していますが、クライアント側でこれらのエラーが発生します。

他の理由で発生する可能性がある場合は、私に提案してください。注: これは他の誰かによって書かれたメンテナンス コードです。問題を修正し、可能であれば改善する必要があります。

ファイル名の例:

222233334444555561_l.jpg
222233334444555561_l1.jpg

コード:

if (sFileName.LastIndexOf('_') != -1)
{
    if (fileName.IndexOf("l1") != -1)
        sVin = sFileName.Remove(sFileName.LastIndexOf('_'), 7);
    else
        sVin = sFileName.Remove(sFileName.LastIndexOf('_'), 6);
}

行のエラー:

sVin = sFileName.Remove(sFileName.LastIndexOf('_'), 7);

これは、次のような入力サンプルに対してエラーが発生することを意味します。222233334444555561_l1.jpg

エラーメッセージ:

エラー メッセージ: System.ArgumentOutOfRangeException: インデックスとカウントは、文字列内の場所を参照する必要があります。

パラメータ名:カウント
  System.String.Remove で (Int32 startIndex、Int32 カウント)
4

2 に答える 2

1
string s = "222233334444555561_l1.jpg";
int underScorePos = s.LastIndexOf("_");
if (underScorePos != -1)
    s = s.Substring(1, underScorePos - 1);
于 2012-10-01T07:17:46.037 に答える
0

ArgumentOutOfRangeException例外を回避するために単純化できます

        int lastIndex = sFileName.LastIndexOf('_');
        if (lastIndex != -1)
        {
            sVin = sFileName.Remove(lastIndex, sFileName.Length - lastIndex);
        }
于 2012-10-01T07:58:15.663 に答える