C#文件操作类

C#个人珍藏基础类库分享 — 7、Xml处理帮助类XmlHelper 做.NET开发的同学,一套简单易用的基础类库是必不可少的,这里把我混迹C#圈子十余载珍藏的类库分享出来,希望能够给刚踏入开发门槛的朋友一些帮助。C#个人珍藏基础类库分享 — 1、通用缓存帮助类CacheHelper。C#个人珍藏基础类库分享 — 3、目录、文件帮助类FileHelper。C#个人珍藏基础类库分享 — 6、数据库处理帮助类SqlHelper。C#个人珍藏基础类库分享 — 7、Xml处理帮助类XmlHelper。C#个人珍藏基础类库分享 — 8、通用工具帮助类ToolHelper。 阅读详情
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Security.AccessControl;
using System.Security.Permissions;
namespace Bll
{
    public class FolderHelper
    {
        //判断文件夹是否存在
        public static bool checkFolderExits(string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path);
            if (dir.Exists)//文件夹存在
            {   
                return true;
            }
            else
            {
               //dir.Create();//不存在就创建一个
                return false;
            }
        }
        //创建一个文件夹,存在就创建失败
        public static bool CreateNewFolder(string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path);

            if (!dir.Exists)
            {
                dir.Create();
                return true;
            }
            else
                return false;
        }
        /// <summary>
        /// 在指定目录下创建指定名称文件夹
        /// </summary>
        /// <param name="ParentsPath"></param>
        /// <param name="NewFolderName"></param>
        /// <returns></returns>
        public static bool CreateNewFolder(string ParentsPath, string NewFolderName)
        {
            string CreatePath = ParentsPath + @"\" + NewFolderName;
            DirectoryInfo dir = new DirectoryInfo(CreatePath);

            if (!dir.Exists)
            {
                dir.Create();
                return true;
            }
            else
                return false;
        }
        /// <summary>
        /// 返回目录下的所有文件名
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static ArrayList getAllFiles(string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path);
            if (dir.Exists)
            {
                FileInfo[] fileinfo = dir.GetFiles();
                ArrayList list = new ArrayList();
                foreach (FileInfo f in fileinfo)
                {
                    list.Add(f.Name);
                }
                return list;
            }
            else
                return null;
        }
        /// <summary>
        /// 计算文件夹的大小
        /// </summary>
        /// <param name="d"></param>
        /// <returns></returns>
        public static long DirSize(DirectoryInfo d)
        {
            long Size = 0;
            // Add file sizes.
            FileInfo[] fis = d.GetFiles();//获得目录文件列表
            foreach (FileInfo fi in fis)
            {
                Size += fi.Length;
            }
            // Add subdirectory sizes.
            DirectoryInfo[] dis = d.GetDirectories();//获取目录子目录列表
            foreach (DirectoryInfo di in dis)
            {
                Size += DirSize(di);
            }
            return Size;
        }
        /// <summary>
        /// 把文件夹得大小转换成比较合适的表示单位
        /// </summary>
        /// <param name="size"></param>
        /// <returns></returns>
        public static string ViewSize(long size)
        {
            long m=size;
            string viewstr;
            
            if ((m / 1024) > 0)//表示可以转换成KB
            {
                m = m / 1024;//转换成KB
                
                if ((m / 1024) > 0)//表示可以转换成MB
                {
                    m = m / 1024;//转换成MB了

                    if ((m / 1024) > 0)//表示可以转换成GB
                    {
                        m = m / 1024;//转换成GB了
                        viewstr = m.ToString() + "GB";
                    }
                    else
                    {
                        viewstr = m.ToString() + "MB";
                    }
                }
                else
                {
                    viewstr = m.ToString() + "KB";
                }
            }
            else
            {
                viewstr = m.ToString() + "byte";
            }
            return viewstr;
        }
        /// <summary>
        /// 删除指定目录和内容
        /// </summary>
        /// <param name="dir"></param>
        /// <returns></returns>
        public static bool delDir(string dir)
        {
            bool flag = false;
            DirectoryInfo d = new DirectoryInfo(dir);
            if (d.Exists)//判断目录是否存在
            {
                try
                {
                    d.Delete();
                    flag = true;
                }
                catch (Exception e) { flag = false; }
            }
            return flag;
        }
        /// <summary>
        /// 删除指定文件
        /// </summary>
        /// <param name="fil"></param>
        /// <returns></returns>
        public static bool delFile(string fil)
        {
            bool flag = false;
            FileInfo d = new FileInfo(fil);
            if (d.Exists)//判断目录是否存在
            {
                try
                {
                    d.Delete();
                    flag = true;
                }
                catch (Exception e) { flag = false; }
            }
            return flag;
        }
        public static void Copy(string sourceDirectory, string targetDirectory)
        {
            DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
            DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);

            CopyAll(diSource, diTarget);
        }
        /// <summary>
        /// 复制目录及子文件到指定目录
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target"></param>
        public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
        {
            // Check if the target directory exists, if not, create it.
            if (Directory.Exists(target.FullName) == false)
            {
                Directory.CreateDirectory(target.FullName);
            }

            // Copy each file into it's new directory.
            foreach (FileInfo fi in source.GetFiles())
            {
                Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
                fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
            }

            // Copy each subdirectory using recursion.
            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {
                DirectoryInfo nextTargetSubDir =
                    target.CreateSubdirectory(diSourceSubDir.Name);
                CopyAll(diSourceSubDir, nextTargetSubDir);
            }
        }



        /// <summary>
        /// 循环读取某个目录下的所有文件和目录,查询有关每一项的一些信息。返回一个文件列表
        /// </summary>
        /// <param name="strCurrentDir"></param>
        public static List<fileEntity> FileView(string strCurrentDir)
        {
            List<fileEntity> fileList = new List<fileEntity>();
            DirectoryInfo dir = new DirectoryInfo(strCurrentDir);

            foreach (FileSystemInfo fsi in dir.GetFileSystemInfos())//这个循环再读取文件的信息
            {
                try
                {
                    //FileSystemInfo 对象可以表示文件或目录,从而可以作为 FileInfo 或 DirectoryInfo 对象的基础。 当分析许多文件和目录时,请使用该基类。
                    FileInfo fi;
                    DirectoryInfo di;
                    //创建一个自己写的实体类的实体
                    fileEntity newfile = new fileEntity();
                    if (fsi is FileInfo)//外层循环读取文件信息
                    {
                        //表示当前fsi是文件
                        fi = (FileInfo)fsi;
                        newfile.fileName = fi.Name;
                        newfile.fileExt = fi.Extension;
                        newfile.fileSize = fi.Length;
                        newfile.FileModify = fi.LastWriteTime;
                        //通过扩展名来选择文件显示图标
                        switch (newfile.fileExt)
                        {
                            case ".gif":
                                newfile.picName = "gif.gif";
                                break;
                            default:
                                newfile.picName = "other.gif";
                                break;
                        }
                        newfile.picName = "<img src='" + newfile.picName + "' width=25 height=20>";
                    }
                    else
                    {
                        di = (DirectoryInfo)fsi;
                        newfile.fileName = di.Name;
                        newfile.fileSize = DirSize(di);//调用计算文件夹大小的方法
                        newfile.FileModify = di.LastWriteTime;
                        newfile.picName = "<img src='directory.gif' width=25 height=20>";
                    }
                    fileList.Add(newfile);
                }
                catch (Exception e) { }
            }
            return fileList;

        }


        /// <summary>
        /// 显示目录和文件
        /// </summary>
        /// <param name="path"></param>
        public static void All(string path)
        {
            FileInfo fi;//文件
            DirectoryInfo di;//目录
            DirectoryInfo dir=null;
            int i = 0; //控制行的颜色
            try
            {
                dir = new DirectoryInfo(path);
            }
            catch (Exception e) { }
            foreach (FileSystemInfo fsi in dir.GetFileSystemInfos())
            {
                try
                {
                    fileEntity newfile = new fileEntity();
                    FolderEntity folder = new FolderEntity();
                    newfile.fileName = "";
                    newfile.picName = "";
                    newfile.fileExt = "";
                    newfile.fileSize = 0;
                    folder.folderName = "";
                    folder.picName = "";

                    i += 1;
                    if (fsi is FileInfo)//判断当前读取的是不是一个文件
                    {
                        //表示当前fsi是文件
                        fi = (FileInfo)fsi;
                        newfile.fileName = fi.Name;
                        newfile.fileExt = fi.Extension;
                        newfile.fileSize = fi.Length;
                        newfile.FileModify = fi.LastWriteTime;

                        //将文件加上可以下载文件的链接


                        newfile.fileName = "<a href='........'></a>";


                        //通过扩展名来选择文件显示图标

                        //Response.Write(Session["DataBasePath"].ToString()+"\\filetype\\"+pfun.getFileExt(FileExt)+".gif");

                        if (fsi.Exists)
                        {
                            switch (newfile.fileExt)
                            {
                                case ".gif":
                                    newfile.picName = "gif.gif";
                                    break;
                                default:
                                    newfile.picName = "other.gif";
                                    break;
                            }
                        }
                        else
                        {
                            newfile.picName = "unknown.gif";
                        }


                        /*
                        switch(FileExt)
                        {
                            case ".gif":
                                FilePic = "gif.gif";
                                break;
                            default:
                                FilePic = "other.gif";
                                break;
                        }
                        */

                        newfile.picName = "<img src='filetype/" + newfile.picName + "' width=16 height=16>";

                    }
                    else
                    {
                        //当前为目录
                        di = (DirectoryInfo)fsi;
                        folder.folderName = di.Name;

                        //给目录加上链接

                        folder.folderName = "<a href='.......'><a>";
                        folder.lastTime = di.LastWriteTime;
                        folder.picName = "<img src='filetype/folder.gif' width=16 height=16>";

                    }
                }catch(Exception e){}
            }


        }
    }
}
原作者不详,转自【http://www.open-open.com/lib/view/open1391348397082.html】
C#中System.IO 文件操作 (File类) • File类是一个方便的静态类,用于执行文件的常规操作,如创建、读取、写入、删除等。• 实际使用中需要特别注意的是文件是否被锁定、路径是否有效,权限是否足够等常见问题。• 使用using语句来确保文件流及时释放,避免锁定问题。关于路径太长这个问题,我会在其他文章里面详细梳理。 阅读详情

相关推荐

C#的文件操作类是开发中经常使用的一个重要组件

通过使用C#中的文件操作类,我们可以轻松地创建、读取、写入和删除文件。当然,文件操作类还提供了许多其他有用的方法,比如复制文件、移动文件、获取文件信息等等。C#的文件操作类是开发中经常使用的一个重要组件。它为我们提供了一系列简单而强大的方法,用于创建、读取、写入和删除文件,以及对文件进行其他常见操作。在本文中,我将详细介绍C#中的文件操作类,并提供相应的源代码和描述。接下来,我们来看一个常见的文件操作任务:创建一个新文件并写入内容。,这个命名空间包含了与文件和文件夹操作相关的类和方法。

PkbgRuby的博客 101

C#帮助类库整理

C#帮助类库整理 文章目录C#帮助类库整理1.日志记录帮助类库2. Json操作帮助类库3.下载网页源代码帮助类 1.日志记录帮助类库 根据Log4net封装: public class LogHelper { static LogHelper() { //通过Nuget添加Log4net的引用 XmlCo...

佛陀爱老虎的博客 2185

.NET C#文件操作之File类和FileInfo类

I/O流(input/output) 文件操作 File类(静态类,无法实例化)(System.IO) 方法: ​AppendAllText:向指定的文件中填充内容,如果文件不存在,会自动创建 ​Copy:复制一个文件到一个新文件 ​Create:向指定的路径中创建一个新文件,如果文件存在,则覆盖这个文件 ​Delect:删除指定路径中的指定文件,如果文件不存在,则不影响 ReadAllBytes...

qq_43434300的博客 1317

87个C#帮助类,各种功能性代码

里面大致包含了下面这些类 C#读取AD域里用户名或组,Chart图形,cmd,Cookie&Session,CSV文件转换,DataTable转实体,DBHelper,DecimalUtility及中文大写数字,DLL,Excel操作类 ,FTP操作类,H5-微信,Html操作类,INI文件读写类,IP辅助类,Javascript,Json,JSON操作,JS操作,Lib,Mime,Net,NPOI,obj,packages,Path,PDF,Properties,QueryString地址栏参

u012408847的博客 1137

深入理解C#中的文件操作类

本文将详细探讨C#中用于文件操作的TextReader、TextWriter、BinaryWriter和BinaryReader类,以及FileInfo类的使用方法和场景。通过实例代码,文章展示了如何读写文本文件和二进制文件,并对文件属性进行操作,如复制、删除和查询文件属性等。本文还讨论了在处理文件时如何使用FileInfo类,以获得更好的控制和性能。

weixin_33239721的博客 375

C#文件操作:使用File与FileInfo类

本章节主要介绍了.NET Framework中System.IO命名空间下的File和FileInfo类的使用方法,这些方法用于实现文件的基本操作,如创建、读取、写入、复制、移动和删除等。详细说明了File类的静态方法和FileInfo类的实例方法,并通过实例代码展示了这些操作的具体实现。

weixin_35756373的博客 455

c# 文件帮助类

根目录,不定义则用默认的 /upload</param>/// <param name="saveFile">文件路径:绝对路径</param>/// <param name="path">文件路径:绝对路径</param>/// <param name="path">文件路径:绝对路径</param>/// <param name="path">文件路径:绝对路径</param>/// <param name="encoding">编码格式

vbloveshllm的专栏 1114

C#编程与文件操作:从Visual Studio到枚举与类的创建

本文深入探讨了在Visual Studio 2010环境下,使用C#进行文件读写的高级操作以及如何创建和使用枚举和类。内容涉及单元测试的实现、文件操作的最佳实践以及新类型创建的基础知识,为编程人员提供了实践操作和理论知识的综合指南。

weixin_29138345的博客 354

C#实现帮助文档CHM

使用C#实现html的帮助文档生成chm文档

qq_43688965的博客 2669

超级多的C#辅助类大全

超级多的C#辅助类大全 网上有各式各样的帮助类,公共类,但是比较零碎,经常有人再群里或者各种社交账号上问有没有这个helper,那个helper,于是萌生了收集全部helper的念头,以便日后使用。各式各样的几乎都能找到,所有功能性代码都是独立的类,类与类之间没有联系,可以单独引用至项目。 1. C#读取AD域里用户名或组 2. Chart图形 3. cmd 4. Cookie&Session 5. CSV文件转换 6. DataTable转实体 7. DBHelper 8. DecimalUtility及中文大写数字 9. DLL 10. Excel操作类 11. FTP操作类 12. H5-微信 13. Html操作类 14. INI文件读写类 15. IP辅助类 16. Javascript 17. Json 18. JSON操作 19. JS操作 20. Lib 21. Mime 22. Net 23. NPOI 24. obj 25. packages 26. Path 27. PDF 28. Properties 29. QueryString 地址栏参数 30. RDLC直接打印帮助类 31. ResourceManager 32. RMB 33. SqlHelper 34. SQL语句拦截器 35. URL的操作类 36. VerifyCode 37. XML操作类 38. 上传下载 39. 二维码操作类 40. 共用工具类 41. 其他 42. 分词辅助类 43. 分页 44. 加密解密 45. 压缩解压缩 46. 各种验证帮助类 47. 图片 48. 图片操作类 49. 图片验证码 50. 处理多媒体的公共类 51. 处理枚举类 52. 字符串 53. 对象转换处理 54. 帮助文档 55. 序列化 56. 异步线程 57. 弹出消息类 58. 数据展示控件绑定数据类 59. 文件操作类 60. 日历 61. 日志 62. 时间戳 63. 时间操作类 64. 条形码 65. 条形码帮助类 66. 条形码转HTML 67. 检测是否有Sql危险字符 68. 正则表达式 69. 汉字转拼音 70. 注册表操作类 71. 科学计数,数学 72. 类型转换 73. 系统操作相关的公共类 74. 缓存 75. 网站安全 76. 网站路径操作类 77. 网络 78. 视频帮助类 79. 视频转换类 80. 计划任务 81. 邮件 82. 邮件2 83. 配置文件操作类 84. 阿里云 85. 随机数类 86. 页面辅助类 87. 验证码

c#开发帮助类

此类库是一个c#的通用类库,其中封装好了byte的操作、数据集的操作、文件的操作、xml的操作,Ado.net的操作等等。

C#文件操作File类vsFileInfo类和Directory类vsDirectoryInfo类

System.IO命名空间包含允许在数据流和文件中进行同步和异步读取及写入的类型。文件和流的差异:文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。流提供一种向后备存储写入字节和从后备存储读取字节的方式。用特定的编码将基元数据类型读作二进制值以二进制形式将基元类型写入流,并支持用特定的编码写入字符串给另一流上的读写操作添加一个缓冲层。无法继承此类Directory公开用于创建、移动、枚举、删除目录和子目录的静态方法。无法继承此类。

wenchm的博客 1972

Air780E模组AT指令实战:5分钟搞定MQTT连接EMQX服务器(附完整代码)

本文详细介绍了如何使用Air780E 4G模组通过AT指令快速连接MQTT服务器。从硬件接线、网络注册到MQTT连接配置,提供了完整的实战步骤和代码示例,帮助开发者快速实现物联网设备的数据上报与远程通信。

wdx012345的博客 742

C#中文件操作类FileUtil

public class FileUtil { /// <summary> /// 换行符 /// </summary> public static string NewLine = "\r\n"; #region 检测指定目录是否存在 /// <s...

weixin_34087307的博客 283

通信工程学习:什么是OLT光线路终端

OLT(光线路终端)是无源光网络(PON)的核心局端设备,负责光/电信号转换、数据处理、带宽分配及用户管理。具有高带宽、低损耗、高安全性和易维护等技术特点,广泛应用于家庭、企业及公共机构宽带接入。未来将向更高性能、智能化方向发展,结合SDN/NFV等新技术,提升网络服务质量。

limengshi138392的博客 4359

Arm A-profile架构RAS系统设计:可靠性、可用性与可服务性解析

在计算机体系结构中,可靠性(Reliability)、可用性(Availability)和可服务性(Serviceability)是构建高可信系统的核心要素。RAS系统通过硬件错误检测、隔离和恢复机制,确保系统持续稳定运行。其技术原理包括ECC内存纠错、冗余执行单元和错误传播阻断等关键技术,可显著降低数据中心等关键业务场景的故障率。现代芯片设计中,Arm A-profile架构提供标准化的RAS框架,涵盖从内存子系统到计算单元的全方位错误管理。通过分层防御策略和统一错误记录格式,实现硬件错误可追溯、可修复。

weixin_30920853的博客 355

C# FileInfo类:文件操作

C# 语言中FileInfo使用类执行典型操作, 例如复制、移动、重命名、创建、打开、删除和追加到文件。 File 类是静态类,其成员也是静态的,通过类名即可访问类的成员;FileInfo 类不是静态成员,其类的成员需要类的实例来访问。 本节主要讲解 FileInfo 类的使用,在 FileInfo 类中提供了一个构造方法,语法形式如下。 ...

haier123888的博客 1543

从勒索软件攻击到数据重生:SQL Server MDF文件修复的实战生存指南

本文详细介绍了SQL Server MDF文件在遭遇勒索软件攻击后的修复策略,重点解析了Recovery Toolbox工具链的应用流程。从灾难评估到数据验证,提供分阶段修复操作、高级修复技术及防御加固方案,帮助企业快速恢复数据库并提升安全防护能力。

weixin_28327051的博客 715

C#文件操作基础之File类和FileInfo类

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; public class MaintainFile { private int IntModify()//主要判断用户要操...

21号先锋者 915

从零构建AI辅助逆向分析环境:JADX-MCP与LLM的实战集成指南

本文详细介绍了如何从零构建AI辅助逆向分析环境,通过集成JADX-MCP与LLM技术,提升Android应用逆向工程效率。文章涵盖环境搭建、插件安装、MCP服务器配置及实战案例分析,帮助开发者快速掌握AI在代码理解、漏洞挖掘和自动化文档生成中的应用。

weixin_27875131的博客 838

JDK8升级JDK17过程中遇到的那些坑

JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。

BASK2312的博客 6684

一个封装好的CSV文件操作C#类代码

一个封装好的CSV文件操作C#类代码 using System.Data; using System.IO; namespace DotNet.Utilities { /// <summary> /// CSV文件转换类 ...

weixin_30633949的博客 294

新手别怕!用‘东北天’和‘右前上’坐标系,5分钟搞懂惯性导航姿态矩阵(含Python验证代码)

本文通过‘东北天(ENU)’和‘右前上(RFU)’坐标系,详细解析惯性导航中的姿态矩阵概念。包含Python代码验证,帮助新手快速理解坐标变换、欧拉角及旋转矩阵的构建与应用,特别强调有限转动不可交换性与无限转动次序无关的区别。

weixin_29062255的博客 331

C# windows文件操作类FileHepler

@C# windows文件操作类FileHepler C# windows文件操作类FileHepler 在C#对文件操作的时候,在百度和必应上搜索很多资料,但是没有一个很完善操作Windows文件的FileHepler类,其他同学写的难免有些差强人意,之后自己想写一个完善的Windows 文件操作类FileHepler。这些方法奉献给大家,所有方法都经过验证,可以放心使用。如果其中有需要探讨的,给我留言即可。 FileHepler操作类引用说明 1.文章的大部分类容是从https://cloud.tenc

种一抹馨香的博客 445

把 LDB 讲透:SAP ABAP 逻辑数据库的结构、事件模型、动态选择与现代替代方案

摘要:SAP中的Logical Database(LDB)是一种将表组织成树形结构并统一生成选择屏幕的技术,通过事件驱动方式向报表程序传递数据。虽然被标记为过时,但在理解标准代码和优化性能方面仍有价值。LDB通过SE36事务码创建,其结构包含层级关系、选择屏幕和数据库程序。报表通过NODES声明和GET事件处理数据,支持动态选择以减少数据库访问。在S/4HANA和ABAP Cloud环境下,建议使用CDS View和ABAP SQL等现代方案替代LDB,以提升可测试性和架构清晰度。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 215

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C#中File类的文件操作方法详解

File类,是一个静态类,主要是来提供一些函数库用的。静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件。File类方法的参量很多时候都是路径path。File的一些方法可以返回FileStream和StreamWriter的对象。可以和他们配套使用。 System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,

Computer_whites的博客 681

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: C#数据库操作类
下一篇: C#实现邮件发送
系统信息
系统信息 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄23年 2404粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值