获取文件夹中所有图片文件
开发中常遇到要读取指定文件夹中的某一类文件,这时如果每次都以拼字符串地址的形式查找文件比较麻烦,分享两个读取指定文件夹中某一类文件的方法。以图片文件为例:1、以WWW方式进行加载,显示在RawImage上;2、以数据流形式读取文件,显示在RawImage上。
一、WWW加载
首先我们创建一个字典,new Dictionary<int, Texture>(),存储图片及对应编号。这里我预先将图片名批处理为从“0001”开始的连续的编号,方便处理。
现在可以开始用WWW加载文件了,注意使用WWW加载本地文件时,地址中尽量不要用中文。
private void LoadByWWW(){string url = PlayerPrefs.GetString("imagePath");long length = GetDirectoryLength(url);for (int i = 1; i < length; i++){StartCoroutine(Load(i.ToString().PadLeft(4, '0')));Debug.Log("i.ToString().PadLeft(4, '0'):" + i.ToString().PadLeft(4, '0'));}}IEnumerator Load(string index){WWW w = new WWW(@"file:///" + PlayerPrefs.GetString("imagePath") + index + ".jpg");yield return w;int i = int.Parse(index);Debug.Log("dirArr:" + i);Debug.Log(@"file:///" + PlayerPrefs.GetString("imagePath") + index + ".jpg");dirArr.Add(i, w.texture);w.Dispose();}public long GetDirectoryLength(string dirPath){//判断给定的路径是否存在,如果不存在则退出if (!Directory.Exists(dirPath))return 0;long len = 0;//定义一个DirectoryInfo对象DirectoryInfo di = new DirectoryInfo(dirPath);//通过GetFiles方法,获取di目录中的所有文件的大小foreach (FileInfo fi in di.GetFiles()){len++;}return len;}
加载完毕后,将图片赋给RawImage即可,注意代码运行顺序,要在加载完毕后调用赋值方法,即先加载完成后显示图片。由于WWW加载需要时间,会出现没有加载完成时,执行了显示图片,此时该图片未加载,导致报错。同时要注意,加载完成后要释放资源。
二、数据流读取
数据流加载文件不过多描述,直接上代码。
private void LoadPicture(){List<string> filePaths = new List<string>();string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG";string[] ImageType = imgtype.Split('|');for (int i = 0; i < ImageType.Length; i++){//获取d盘中a文件夹下所有的图片路径 string imagePath = PlayerPrefs.GetString("imagePath");string[] dirs = Directory.GetFiles(imagePath, ImageType[i]);for (int j = 0; j < dirs.Length; j++){filePaths.Add(dirs[j]);//Debug.Log("filePaths:" + filePaths);}}for (int i = 0; i < filePaths.Count; i++){Texture2D tx = new Texture2D(100, 100);tx.LoadImage(getImageByte(filePaths[i]));allTex2d.Add(tx);}filePaths.Clear();}/// <summary> /// 根据图片路径返回图片的字节流byte[] /// </summary> /// <param name="imagePath">图片路径</param> /// <returns>返回的字节流</returns> private static byte[] getImageByte(string imagePath){FileStream files = new FileStream(imagePath, FileMode.Open);imgByte = new byte[files.Length];files.Read(imgByte, 0, (int)files.Length);files.Close();files.Dispose();files = null;return imgByte;}
同样要注意释放资源。
获取文件夹中所有图片文件相关推荐
- 获取文件夹中所有文件的文件名[重复]
本文翻译自:Getting the filenames of all files in a folder [duplicate] Possible Duplicate: 可能重复: Read all ...
- Python 获取文件夹中的文件列表
获取文件夹中的文件列表 问题 你想获取文件系统中某个目录下的所有文件列表. 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.lis ...
- Python计算机视觉读书笔记_04:获得文件夹中所有图片文件名,并生成列表
在图像处理中,我们经常会遇到要读取文件夹中所有图片的操作,这时,我们想要获得的是带有路径的图片文件名,接下来就记录一下如何得到存放所有图片文件名的列表. 首先,我们的图片路径如下所示,我们要获得 &q ...
- C++读取文件夹中所有文件的路径,包含子文件夹
C++读取文件夹中所有文件的路径,包含子文件夹 C++实现指定文件夹的路径,获取该路径下所有文件的路径,含子文件夹的文件,为了实现跨平台编译,最后会给出Window和Linux的完成程序: [1]下面 ...
- 使用C语言查看一个文件夹中所有文件及目录
1.前言 1.1声明 文章中的文字可能存在语法错语以及标点错误,请谅解: 如果在文章中发现代码错误或其它问题请告知,感谢! 2.实现方法 为了使用C语言实现查看一个文件夹中的文件数量功能,可以使用di ...
- java 文件递归删除文件夹_Java十行代码实现递归删除文件夹中所有文件
递归删除文件夹中所有文件 要递归首先需要有方法.递归,即方法自己调用自己.一般在程序中很少使用,但在这个实现中,我们无法知道文件夹的深度,更无法根据深度来实现循环的嵌套. 递归两个重要条件: 终止边界 ...
- mvfiles:一次性提取多个文件夹中的文件
作者:吴玉轩 (南开大学) Stata 连享会: 知乎 | 简书 | 码云 | CSDN Stata连享会 精品专题 || 精彩推文 2019暑期"实证研究方法与经典论文" ...
- matlab 选择文件夹、选择文件GUI和逐一读取文件夹中的文件
matlab 选择文件夹.选择文件GUI和逐一读取文件夹中的文件 1. 选择文件夹路径: filepath = uigetdir('*.*','请选择文件夹');%fliepath为文件夹路径 2. ...
- 按文件名对文件夹中的文件分类
我的文件夹中的部分文件,需要同一类的图片放在同一文件夹下(obj后面是类名). #用于获取文件夹中的文件对象.创建文件夹 import shutil #移动文件到指定文件夹中 import ospat ...
- VMware虚拟机文件夹中各文件作用详解
VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...
最新文章
- 如何计算递归算法的时间复杂度
- springMVC面试问题整理一
- boost::serialization模块测试extended_type_info的实现,使用多个共享库时有效
- Oracle之用户操作
- 房贷利率上浮30%利息太高吃不消,如何让利率变成下浮10%?
- 开发Eclipse插件
- grandle下载安装图解
- C++的堆与拷贝构造函数
- ajax send()的作用_AJAX(Asynchronous JavaScript And XML)
- 电脑是否入侵,是否留有后门
- 事件声音和提示 注册表全攻略
- 信息系统项目管理师学习笔记16-项目变更管理
- MongoDB在Windows10上的安装配置和基本语句
- lol 8.21服务器维护,《LOL》8.16版本维护到几点 8月21日更新维护内容汇总
- 喜迎国庆中秋,双节快乐!
- 基于ICP算法的三维点云数据拼接算法的实现
- [SCTF2020]CloudDisk
- AI模型神预测谁是卡塔尔世界杯冠军
- 中电信抢滩云计算 上海开建信息银行
- Springboot配置MongoDB连接池