C# 选择文件学习笔记-选择文件、选择文件夹、打开文件(或者文件夹)

C#选择文件、选择文件夹、打开文件(或者文件夹)

1、选择文件用OpenDialog

OpenFileDialog dialog = new OpenFileDialog();
dialog.Multiselect = true;//该值确定是否可以选择多个文件
dialog.Title = "请选择文件夹";
dialog.Filter = "所有文件(*.*)|*.*";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    string file = dialog.FileName;
}

 

Filter 属性 赋值为一字符串 用于过滤文件类型;
字符串说明如下:
‘|’分割的两个,一个是注释,一个是真的Filter,显示出来的是那个注释。如果要一次显示多中类型的文件,用分号分开。
如:
Open1.Filter="图片文件(*.jpg,*.gif,*.bmp)|*.jpg;*.gif;*.bmp";
则过滤的文件类型为 “|”号  右边的 *.jpg;*.gif;*.bmp 三种类型文件,在OpenDialog/SaveDialog中显示给用户看的文件类型字符串则是 :“|”号  左边的 图片文件(*.jpg,*.gif,*.bmp)。
再如:
Open1.Filter="图像文件(*.jpg;*.jpg;*.jpeg;*.gif;*.png)|*.jpg;*.jpeg;*.gif;*.png";

 

2、使用System.Windows.Forms.FolderBrowserDialog选择文件夹

System.Windows.Forms.FolderBrowserDialog dialog =new System.Windows.Forms.FolderBrowserDialog();
dialog.Description = "请选择Txt所在文件夹";
if (dialog.ShowDialog()==System.Windows.Forms.DialogResult.OK  )
{
   if (string.IsNullOrEmpty(dialog.SelectedPath))
   {
       System.Windows.MessageBox.Show(this, "文件夹路径不能为空", "提示");
       return;
   }
   this.LoadingText = "处理中...";
   this.LoadingDisplay = true;
   Action<string> a = DaoRuData;
   a.BeginInvoke(dialog.SelectedPath,asyncCallback, a);
}

 

3、直接打开某路径下的文件或者文件夹

 System.Diagnostics.Process.Start("ExpLore", "C:\\window");

4 检查是否有文件夹

    //检查有该路径是否就创建
                if (!Directory.Exists(toFileFullPath))
                {
                    Directory.CreateDirectory(toFileFullPath);
                }

5 判断是否有文件

 if (File.Exists(path)) //判断文件是否存在
{
   File.Delete(HttpRuntime.AppDomainAppPath + model.FilePath);
 //删除表中记录
 }

6 saveFileDialog(另存为)保存图片文件

         SaveFileDialog savedialog = new SaveFileDialog();
            savedialog.Filter = "Jpg 图片|*.jpg|Bmp 图片|*.bmp|Gif 图片|*.gif|Png 图片|*.png|Wmf  图片|*.wmf";
            savedialog.FilterIndex = 0;
            savedialog.RestoreDirectory = true;//保存对话框是否记忆上次打开的目录
            savedialog.CheckPathExists = true;//检查目录
            savedialog.FileName = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "-"; ;//设置默认文件名
            if (savedialog.ShowDialog() == DialogResult.OK)
            {
                image.Save(savedialog.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);// image为要保存的图片
                MessageBox.Show(this, "图片保存成功!", "信息提示");
            }

7 文件与图片的转化

public int FileToStream()//文件到流的转换
{
    Image img = new Bitmap(SourFilePath);
    MemoryStream stream = new MemoryStream();
    img.Save(stream, ImageFormat.Bmp);
    BinaryReader br = new BinaryReader(stream);
    photo = stream.ToArray();
    stream.Close();
    return 0;
}

public Image ShowPic()//根据流显图
{
    byte[] bytes = photo;
    MemoryStream ms = new MemoryStream(bytes);
    ms.Position = 0;
    Image img = Image.FromStream(ms);
    ms.Close();
    return img;
}

public int StreamToFile()//反向转换
{
    byte[] bytes = photo;
    FileStream fs = new FileStream(ObjFilePath, FileMode.Create, FileAccess.Write);
    fs.Write(bytes, 0, bytes.Length);
    fs.Flush();
    fs.Close();
    return 0;
}

读取图片文件

    /// <summary>
        /// 通过FileStream 来打开文件,这样就可以实现不锁定Image文件,到时可以让多用户同时访问Image文件
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static Bitmap ReadImageFile(string path)
        {
            FileStream fs = File.OpenRead(path); //OpenRead
            int filelength = 0;
            filelength = (int)fs.Length; //获得文件长度 
            Byte[] image = new Byte[filelength]; //建立一个字节数组 
            fs.Read(image, 0, filelength); //按字节流读取 
            System.Drawing.Image result = System.Drawing.Image.FromStream(fs);
            fs.Close();
            Bitmap bit = new Bitmap(result);
            return bit;
        }

9保存网络图片到本地

#region 保存web图片到本地
    /// <summary>
    /// 保存web图片到本地
    /// </summary>
    /// <param name="imgUrl">web图片路径</param>
    /// <param name="path">保存路径</param>
    /// <param name="fileName">保存文件名</param>
    /// <returns></returns>
    public static string SaveImageFromWeb(string imgUrl, string path, string fileName)
    {
        if (path.Equals(""))
            throw new Exception("未指定保存文件的路径");
        string imgName = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("/") + 1);
        string defaultType = ".jpg";
        string[] imgTypes = new string[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
        string imgType = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("."));
        string imgPath = "";
        foreach (string it in imgTypes)
        {
            if (imgType.ToLower().Equals(it))
                break;
            if (it.Equals(".bmp"))
                imgType = defaultType;
        }

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl);
        request.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; Natas.Robot)";
        request.Timeout = 3000;

        WebResponse response = request.GetResponse();
        Stream stream = response.GetResponseStream();

        if (response.ContentType.ToLower().StartsWith("image/"))
        {
            byte[] arrayByte = new byte[1024];
            int imgLong = (int)response.ContentLength;
            int l = 0;

            if (fileName == "")
                fileName = imgName;

            FileStream fso = new FileStream(path + fileName + imgType, FileMode.Create);
            while (l < imgLong)
            {
                int i = stream.Read(arrayByte, 0, 1024);
                fso.Write(arrayByte, 0, i);
                l += i;
            }

            fso.Close();
            stream.Close();
            response.Close();
            imgPath = fileName + imgType;
            return imgPath;
        }
        else
        {
            return "";
        }
    }

10利用image直接保存

 image.Save(toFileFullPath + fileName);
 

11 读取字节转化为图片

      /// <summary>
        /// 读取byte[]并转化为图片
        /// </summary>
        /// <param name="bytes">byte[]</param>
        /// <returns>Image</returns>
        private Image GetImageByBytes(byte[] bytes)
        {
            Image photo = null;
            using (MemoryStream ms = new MemoryStream(bytes))
            {
                ms.Write(bytes, 0, bytes.Length);
                photo = Image.FromStream(ms, true);
            }

            return photo;
        }

13 读取网络请求转换为图片

     private Image ImageFromWeb(String url )
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                WebResponse response = request.GetResponse();
                Image img = Image.FromStream(response.GetResponseStream());
                return img;
            }

文件说明:

File类一些常用的静态方法:

方法说明:
Copy()
将文件复制到规定的位置
Create()
在规定的路径上创建文件
Delete()
删除文件
Open()
在规定的路径上返回FileStream对象
Move()
将规定的文件移动到新位置。可以在新位置为文件规定不同的名称

Directory类一些常用的静态方法:

方法说明
CreateDirectory()
创建具有规定路径的目录
Delete()
删除规定的目录以及其中的所有文件
GetDirectories()
返回表示当前目录之下的目录的Directory对象的数组
GetFiles()
返回在当前目录中的File对象的数组
Move()
将规定的目录移动到新位置。可以在新位置为文件夹规定一个新名称

FileInfo类:

它没有静态方法,仅可用于实例化的对象。FileInfo对象表示在磁盘或网络位置的文件。注意它不是流。为了实现对文件的读取或写入,必须创建Stream对象。

如果仅在对象上进行单一方法调用,则可以使用静态File类。在此,静态调用要快一些,因为.Net Framework不必遍历实例化新对象并调用方法的过程。但是如果应用程序在文件上执行几种操作,在实例化FileInfo对象并使用其方法就更好一些。这会节省时间,因为对象将在文件系统上引用正确的文件,而静态类就必须每次都寻找文件。

FileInfo类提供的基础性的属性,可用来更新文件。

属性
说明

Attributes
获取或者设置当前文件的属性
CreationTime
获取当前文件的创建日期和时间
DirectoryName
返回文件目录的路径
Exists
判断是否存在文件
FullName
检索文件的完整路径
Length
获取文件的容量
Name
仅仅返回文件的名称,而不是完整的文件位置路径

DirectoryInfo类:

DirectoryInfo类的作用类似于FileInfo类。它是一个实例化的对象,表示计算机上的单一目录。同FileInfo类—样,在Directory和DirectoryInfo之间可以复制许多方法调用。当使用这二者时,可以便用相同的原则:如果进行单一调用,就使用静态Directory类。如果进行一系列调用,则使用实例化的DirectoryInfo对象。

DirectoryInfo类与FileInfo类共享几乎所有相同的属性,DirectoryInfo类作用在无文件的目录上除外。

FileStream对象:

表示在磁盘或网络路径上指向文件的流。当类提供向文件读取和写入字节的方法时,经常使用StreamReader和StreamWriter执行这些功能。这是因为FileStream类操作字节和字节数组,而Stream类操作字符数据。

还有几种方法可以创建FileStream对象。构造函数具有许多不同的重载/版本,但是最简单的构造函数仅仅带有两个参数,即文件名和FileMode枚举。

FileStream aFile = new FileStream("a.txt",FileMode.OpenOrCreate);

FileMode枚举的成员:

FileMode枚举成员
说明
Append
如果文件存在,就打开文件,将文件位置移动到文件的末尾,并创建个新文件。FileMode.Append仅可以与枚举FileAccess.Write联合使用
Create
创建新文件,如果存在这样的文件就破坏它
CreateNew
创建新文件,但是如果已经存在了此文件,则抛出异常
Open
打开现有的文件。如果不存在所规定的文件,则抛出异常
OpenOrCreate
如果文件存在,则规定打开文件,否则就创建新文件。如果文件已经存在,则保留在文件中的数据
Truncate
打开现有文件,清除其内容。然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期。必须存在有文件,否则就会抛出异常

前面的构造函数默认以只读模式打开文件。需要一个附加参数规定不同的访问级别,此参数即FileAccess参数。

FileStream aFile = new FileStream("a.txt",FileMode.OpenOrCreate,FileAccess.Write);

此行代码将打开文件,对文件进行写访问。对文件的任何读的企图都会导致抛出异常。仅有3种类型的FileAccess枚举:Read,ReadWirte和Write。可以打开一个文件,只读、只写或进行读写操作。此属性的作用是:基于用户的身份验证级别改变用户对文件的访问。

付出最大努力,追求最高成就。

总结:

打开选择文件OpenDialog,等于open.ShowDialog()== DialogResult.OK,得到路径

打开选择文件夹FolderBrowserDialog 等于OK,得到路径

另存为SaveFileDialog

读取文件FileStream fs = File.OpenRead(path); //OpenRead

字节转换为图片 Image img = Image.FromStream(response.GetResponseStream());

把图片保存在某个文件下    Image image = GetImageByBytes(iamgebyte);  img.Save(path);

打开某个文件流 FileStream fs = new FileStream(ObjFilePath, FileMode.Create, FileAccess.Write);

写入某个文件 fs.Write(bytes, 0, bytes.Length);

读取某个文件 fs. Read()(bytes, 0, bytes.Length); 

参考文献:

https://www.cnblogs.com/zhlziliaoku/p/5241097.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值