1

次の問題があります。ファイルパスを格納する必要がある文字列変数があります。foreach ループでは、特定のディレクトリ内のすべてのファイルを調べて、その文字列変数に保存されている最も古いファイルを探しています。ループが終了したら、そのファイルを削除しようとしましたが、エラーが発生しました:未割り当てのローカル変数の使用。

コードは次のとおりです。

DateTime min = DateTime.Now;
string[] fileNames = Directory.GetFiles(somePath);
string fileDelete;
int countFiles = fileNames.Length;
if (countfiles > 5)
{
    foreach (string someFile in fileNames)
    {
        FileInfo infoFile = new FileInfo(someFile);
        if (infoFile.CreationTime <= min)
        {
            min = infoFile.CreationTime;
            fileDelete = someFile;
        }   
    }
    File.Delete(fileDelete);
}   

File.Delete(fileDelete) の文字列 fileDelete には値がないと書かれていますが、面白いのは、最初にそのように値を指定すると、次のようになります。

string fileDelete = "blabla";

それは完全に正常に動作します。あなたが疑問に思っている場合に備えて、これはメソッドのほんの一部です

4

5 に答える 5

3

C# では、変数を初期化する必要があります。そうしないと、不要な値を File.Delete に渡すことができます。

使用をお勧めします

string fileDelete = null; // or ""

後でそれを確認します。

if (!string.IsNullOrEmpty(fileDelete))
{
  File.Delete(fileDelete);
}
于 2016-01-20T12:03:47.603 に答える
0

これを使って

DateTime min = DateTime.Now;
string[] fileNames = Directory.GetFiles(somePath);
string fileDelete;
int countFiles = fileNames.Length;
if (countfiles > 5)
{
    foreach (string someFile in fileNames)
    {
        FileInfo infoFile = new FileInfo(someFile);
        if (infoFile.CreationTime <= min)
        {
            min = infoFile.CreationTime;
            fileDelete = someFile;
            File.Delete(fileDelete);
        }   
    }

}   
于 2016-01-20T12:23:50.090 に答える