【问题标题】:How to check the name of files inside a folder如何检查文件夹内的文件名
【发布时间】:2013-02-04 12:02:42
【问题描述】:

我尝试了在this thread 上找到的内容,但没有完全按照我想要的方式工作...我有一个名为photos 的文件夹may 有图片或没有。 picture's name 是客户端的matriculation。我需要将matriculation 作为parameter 传递,并检查是否有picture 名称为matriculation 我传递为parameter

我试过这个:

public void VerifyPhoto(string matriculation)
        {
            string path = Txt_PhotosPath.Text;
            var file = Directory.GetFiles(path, matriculation + ".jpg");

        }

我如何检查它是否找到了图片?我试图比较这个 file != null 但它不适用于 var 类型。任何提示? debuging我看到它找到了图片因为有一个String[1]但我不知道check它...

---更新--- path:C:"\Users\admin\Desktop\photos" matriculation:"607659.jpg" 有一个具有该名称的文件,但它一直返回 false 怎么了?

 string path = Txt_PhotosPath.Text;
            string filename = string.Format("{0}.jpg", matriculation);
            if (Directory.Exists(path))
            {
                if (File.Exists(Path.Combine(path, filename)))
                {
                    return true;
                }
                else
                    return false;
            }
            else
                return false;        

【问题讨论】:

    标签: c# winforms visual-studio-2010


    【解决方案1】:
    if (File.Exists(Path.Combine(path, matriculation + ".jpg"));
    

    【讨论】:

    • 感谢 +1 工作完美;D
    【解决方案2】:

    使用Path.CombineDirectory+File.Exists

    public bool VerifyPhoto(string matriculation)
    {
        string dir = Txt_PhotosPath.Text;
        if(Directory.Exists(dir))
        {
            string fileName = string.Format("{0}.jpg", matriculation);
            if(File.Exists(Path.Combine(dir, fileName)))
                return true;
            else
                return false;
        }
        else
            return false;
    }
    

    【讨论】:

    • 谢谢蒂姆! +1。这个string.Format("{0}.jpg"..) 是干什么用的?是不是要把{0}换成matriculation's value
    • @Ghaleon 将“{0}”替换为matriculationmsdn.microsoft.com/en-us/library/system.string.format.aspx
    • 是的,我花了一段时间才记起来,我在Chehe 看到了。谢谢蒂姆!
    • @TimSchmelter 蒂姆!我现在测试了,文件夹里有一张图片,名字是我作为参数传进去的,但是如果一直返回false这是怎么回事?
    • @Ghaleon:您必须选择要检查的内容。因此,如果要检查Path.Combine(path, filename) 的值,则必须在右键单击它之前全选。所以不要双击Combine。将快速观察窗口理解为可以输入代码的控制台,Combine 单独不是一个有效的语句。
    【解决方案3】:

    这是官方文档所说的:http://msdn.microsoft.com/en-us/library/wz42302f.aspx

    如果没有文件,或者没有文件匹配 searchPattern 参数, 此方法返回一个空数组。

    因此,将返回一个空数组,而不是检查空数组。

    【讨论】:

    • 谢谢! +1 篇有用的文章。
    【解决方案4】:

    这很简单。以下函数将帮助您检查参数中指定名称的文件是否存在。

    File.Exists(Path)
    

    命名空间:System.IO

    如果文件存在,此函数返回 true。否则它返回一个假。参数是一个字符串,它是要检查的文件的完整路径。eg: G:\Folder1\Filder2\File.jpg

    它不会抛出任何异常,因为如果找不到文件,它会返回 false。

    您不必将路径和所有内容结合起来,只需按照我的示例中所述提供文件的完整路径即可。

    欲了解更多信息click here

    【讨论】:

    • 谢谢,解释清楚! +1
    【解决方案5】:

    不要使用var file,而是使用string[] files

    要检查您是否找到任何文件,请if (files.Length > 0)

    使用var 通常是一个非常的坏主意,所以如果可以避免的话就不要这样做。

    【讨论】:

    • 谢谢+1。我避免使用string[],因为我认为我必须使用foreach,但files.lengh > 0 更简单,呵呵:D
    【解决方案6】:

    要回答您的问题,您不能使用 != null 的原因是因为 GetFiles() 的底层代码会创建一个列表并调用 ToArray() 扩展方法。

     return new List<string>(FileSystemEnumerableFactory.CreateFileNameIterator(path, userPathOriginal, searchPattern, includeFiles, includeDirs, searchOption, checkHost)).ToArray();
    

    您将需要使用:-

    file.Count()  file.Length
    

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2011-11-12
      • 1970-01-01
      • 2016-09-10
      • 2015-09-14
      • 2021-12-31
      相关资源
      最近更新 更多