1

以下は、フォルダー内のファイルをカウントするために使用しているコードのスニペットです (追加のフォルダーではなくファイルのみ)。このフォルダーに複数のファイルがある場合は、例外をスローする必要があります。

private bool CheckCondition2(String FolderName)
{
    bool ConditionPassed = false;

    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName);
    int count = dir.GetFiles().Length;

    ConditionPassed = (count > 1);

    return ConditionPassed;
}

次に、主に次のように呼び出します。

if (!CheckCondition2(SourceFolder))
{
    CanCopy = false;
    throw new Exception("More than one mark-off file.");
}

現在、テストすると、ディレクトリにファイルが1つしかないにもかかわらず、複数のファイルがあることがわかります。コードで何が間違っていますか?

4

6 に答える 6

4

メソッドでtrueは、複数のファイルがある場合に戻ります。

ただし、ifステートメントでは、をチェックしますfalse。これらを少し混同しているようです。

コードをデバッグし、値の変化を追跡して、論理エラーがないかどうかを確認することを常にお勧めします。もちろん、これを行うためのより自動で信頼性の高い方法は、単体テストを作成することです。

メソッドの条件を切り替えることができます。

ConditionPassed = (count <= 1);

trueそうすれば、「正しい」状態にあるときにメソッドが返されることを意味します。代わりに、if ステートメントを read に変更することができます

if (CheckCondition2(SourceFolder))

どちらもおそらくあなたのために働くでしょう。HasMoreThanOneFile後者の例では、メソッドの名前を何かに変更して、メソッドが何をするのかを非常に明確にすることもお勧めします。

于 2012-07-23T11:59:53.487 に答える
0

あなたの論理に欠陥があると思います。ConditionPassed = (count > 1) は ConditionPassed = (count <=1) である必要があります。この助けを願っています!

于 2012-07-23T12:02:59.287 に答える
0

コードをデバッグしてみてください。 ここに画像の説明を入力

if ステートメントに小さな変更を加えた後、うまくいきました。if (CheckCondition2(SourceFolder))

混乱を避けるために、関数の名前を更新してみてください。

于 2012-07-23T12:09:33.987 に答える
0

これを試して:

ConditionPassed = (count <= 1); //check should pass if there is at most one file
于 2012-07-23T12:02:02.583 に答える
0

条件を変えるか

ConditionPassed = (count <= 1);

または if ステートメント

if (CheckCondition2(SourceFolder)))

あなたの成功シナリオは、ソースフォルダーに最大1つのファイルになることだと思います

于 2012-07-23T12:02:03.080 に答える
0

ブール値を使用する代わりに、試してみませんか...

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName);
int count = dir.GetFiles().Length;

if (count > 1)
{
    throw new Exception("More than one mark-off file.");
}
else
{
    // Something else
}

少しきれいなコードです (OCD が起動して申し訳ありません!)

于 2012-07-23T12:02:13.800 に答える