当我将 file.FullName(我调试的不是 null)放入字符串数组时,有些是 null,有些不是

When i put file.FullName(which is not null i debugged) into an string array some are null and some are not

所以让我们举个例子,我的图像路径是 "D:\..." 任何东西。 file.FullName 是这条路径,但有时当我将该路径放入数组时 该元素为空,但我不知道为什么。

假设我的文件夹中有 100 张图片,那么其中 10% 的名称为空 在数组中,但我检查了 debuggin file.FullName 永远不会为空。

有人知道为什么会这样吗? 还是我忽略了什么?

            int z = 0;
            foreach (FileInfo file in Variables.dir.GetFiles())
            {
                try
                {
                    this.myImageList.Images.Add(Image.FromFile(file.FullName));
                    names[z] = file.FullName;
                }
                catch
                {
                    Console.WriteLine("This is not an image file");
                }
                z++;
            }

您的代码即使出错,仍在递增 z。将 z 移动到 try{} 之内,而不是 catch{} / finally{} 之外。这将导致 z 仅在程序仅找到它正在查找的文件/符合您的条件(即图像文件)时才增加。

        int z = 0;
        foreach (FileInfo file in Variables.dir.GetFiles())
        {
            try
            {
                this.myImageList.Images.Add(Image.FromFile(file.FullName));
                names[z] = file.FullName;
                z++;
            }
            catch
            {
                Console.WriteLine("This is not an image file");
            }
        }

您的程序可能在未查看调试文件路径时查找隐藏文件或其他文件。您的代码为 catch{} 的多种原因,但如果不添加则不确定:

try{ ... }
catch(Exception ex)
{
    Console.WriteLine("This is not an image file: \n" + ex); 
}

为了至少得到正确的错误以进一步调试

要么更改行的顺序:

this.myImageList.Images.Add(Image.FromFile(file.FullName));

names[z] = file.FullName;

以便在异常将您发送到 catch 块之前为 names[z] 分配文件名,因为加载图像文件时出现问题。

或者考虑添加一个 finally{ names[z] = file.FullName; } 块,这样即使出现异常,名称数组也始终获取文件名。

你最终会在你的 ImageList 中得到不同数量的项目,因为一些文件永远不会被添加,但你的文件名列表至少是完整的