等待上传中...
2018年11月20日 14点52分 J九

c# ini配置文件可以通过程序运行后来更改里面的键值吗?

在不考虑用数据库的情况下

我用ini存放数据

比如就是说我在ini里面写了初始值密码Password为123,

当程序启动时界面上需要密码验证才能使用,

而验证密码是读取ini里面的初始密码,

因为考虑到客户体验,还添加了一个更改密码项,

可是网上找的一些资料都是在程序启动时能够更改密码,

但在程序关闭后ini里面的键值没有变,

还是初始值123

这个问题折磨我很久了

有人说配置文件里面的东西只能在里面更改

不能通过外部对ini文件进行更改操作

它是有权限的

。。。。。


我感觉

这就像是一个bug


——————————————————————

...……撤销了

。。才疏学浅

总结一下:

INI文件其实是一种具有特定结构的文本文件,它的构成分为三部分,结构如下:

[Section1]
key 1 = value2
key 1 = value2

INI文件由若干个段落(section)组成,每个段落又分成若干个键(key)和值(value)。Windows系统自带的Win32的API函数GetPrivateProfileString()和WritePrivateProfileString()分别实现了对INI文件的读写操作,他们位于kernel32.dll下。

但是令人遗憾的是C#所使用的.NET框架下的公共类库并没有提供直接操作INI文件的类,所以唯一比较理想的方法就是调用API函数。

然后,.Net框架下的类库是基于托管代码的,而API函数是基于非托管代码的,(在运行库的控制下执行的代码称作托管代码。相反,在运行库之外运行的代码称作非托管代码。)如何实现托管代码与非托管代码之间的操作呢?.Net框架的System.Runtime.InteropServices命名空间下提供各种各样支持COM interop及平台调用服务的成员,其中最重要的属性之一DllImportAttribute可以用来定义用于访问非托管API的平台调用方法,它提供了对从非托管DLL导出的函数进行调用所必需的信息。


修改

编程开发语言 C#


等待上传中...
2018年11月19日 11点42分 chenzhiwei

完成新手任务

完成新手任务,暂无求助,有其它需要的可以找我。

完成新手任务,暂无求助,有其它需要的可以找我。

修改

顾问咨询


等待上传中...
2018年11月19日 10点19分 CristanoShow

C#:序列化文件写入数据库

读取的序列化的数据为什么是空的呢

修改

C#


等待上传中...
2018年11月09日 14点18分 CristanoShow

Winform :TreeView

使用TreeView控件,怎么点击子节点的时候,让跳转的页面在右侧的panel中显示出来
修改

C#


等待上传中...
2018年11月07日 14点34分 CristanoShow

C#:为什么我这样写会出现未将对象引用设置到对象的实例

 public static Project CreateProject(string fileName)
        {     
        Project project = new Project();
            DrillStringAssembly dr = new DrillStringAssembly();
            CasingDesignContext cc = new CasingDesignContext();
            project.ID = project.id.ToString();
            project.Well_Id = project.Well.Id.ToString();
            project.WellSize = dr.WellSize;
            project.Method = cc.StreCheckMethod.ToString();
            project.ReservoirType = cc.ReservoirTypeVal.ToString();
            project.CasingType = cc.CasingTypeVal.ToString();
            project.EmptiedCoefficient = cc.EmptiedCoefficient.ToString();
            project.Completion_Fluid = cc.Completion_Fluid.ToString();
            project.MaxDrillingFluidDensity = cc.MaxDrillingFluidDensity.ToString();
            project.MinDrillingFluidDensity = cc.MinDrillingFluidDensity.ToString();
            project.EquivalentDensity = cc.EquivalentDensity.ToString();
            project.FormationWaterDensity = cc.FormationWaterDensity.ToString();
            project.GasRelativeDensity = cc.GasRelativeDensity.ToString();
            project.OilProduction = cc.oil_tube.ToString();
            project.Bending = cc.Bending.ToString();
            project.Creep = cc.Creep.ToString();
            project.CreepFormationGradient = cc.FormationPressureGradient.ToString();
            project.CreepPissonCoefficient = cc.CreepPoissonCoefficient.ToString();
            project.CreepTopDeepth = cc.CreepTopDepth.ToString();
            project.CreepBottomDepth = cc.CreepBottonDepth.ToString();
            project.ResistanceCollapse = cc.ResistanceCollapse.ToString();
            project.ResistanceInternalPressure = cc.ResistanceInternalPressure.ToString();
            project.ResistanceTensile = cc.ResistanceTensile.ToString();
            string sql = "insert into CEMENT_DG_CASINGSTRENGTHBASIC values ('" + project.ID + "','" + project.Well_Id + "'," +
                "'" + project.WellSize + "','" + project.Method + "','" + project.ReservoirType + "','" + project.CasingType + "','" + project.EmptiedCoefficient + "','" + project.Completion_Fluid + "'," +
                "'" + project.MaxDrillingFluidDensity + "','" + project.MinDrillingFluidDensity + "','" + project.EquivalentDensity + "','" + project.FormationWaterDensity + "'," +
                "'" + project.GasRelativeDensity + "','" + project.OilProduction + "','" + project.Bending + "','" + project.Creep + "','" + project.CreepFormationGradient + "'," +
                "'" + project.CreepPissonCoefficient + "','"+project.CreepTopDeepth+"','" + project.CreepBottomDepth + "','" + project.ResistanceCollapse + "','" + project.ResistanceInternalPressure + "','" + project.ResistanceTensile + "')";
            try
            {
                using (SQLiteConnection sc = new SQLiteConnection(ConnectionData.ConnectionString))
                {
                    sc.Open();
                    using (SQLiteCommand scmd = new SQLiteCommand(sql, sc))
                    {
                        int rows = scmd.ExecuteNonQuery();
                    }
                    sc.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, " 信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
               
            }

            //// 设置文件名和地址
            project.fileName = System.IO.Path.GetFileName(fileName);
            project.dir = System.IO.Path.GetDirectoryName(fileName);
            return project;
        }
修改

C#


等待上传中...
2018年11月14日 15点00分 Yoshiki

无法连接到github, 无法执行 push、clone 等操作

这个问题发生在公司的 Windows 电脑,而我的个人电脑 Mac 则无任何问题。


这台 win 电脑,我是设置了公钥的。

比如我要从 github 上 clone 下来一个项目,我先使用 https 的方式进行克隆:




然后我在使用 ssh 的方式,这一次会等待比较长的时间,大概有10秒左右,然后依然是错误信息:



同样的操作,码云是没有任何问题,clone、push 什么的都正常。还有公司内部的 git 服务器也 ok,但是 github 就不行了, 求大神帮忙拍错解答。

修改

github git 工具软件


等待上传中...
2018年11月02日 13点41分 CristanoShow

数据库存放序列化数据

怎么将序列化的数据直接存放到数据库中(现阶段是读取序列化的数据直接写到二进制文件中)。有没什么办法直接写到数据库中呢?

  /// <summary>
        /// 从文件创建项目
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static Project CreateProject(string fileName)
        {
            if (fileName == null || fileName.Length == 0)
                throw new ArgumentNullException("fileName");
            if (!System.IO.File.Exists(fileName))
                return null;

            // 打开文件
            Project project = null;
            try
            {
                // 序列化至文件
                IObjectSerializer<Project> serializer = new BinaryFormatter<Project>();
                // byte[] bytes = serializer.Serialize(Project.CurrentProject);
                using (FileStream fs = new FileStream(fileName, FileMode.Open))
                {
                    byte[] bytes = new byte[fs.Length];

                    // 缓冲区
                    byte[] buffer = new byte[1024];
                    // 偏移
                    long offset = 0;
                    int count = fs.Read(buffer, 0, buffer.Length);
                    while (count > 0)
                    {
                        // 将缓冲区的值COPY至bytes
                        Array.Copy(buffer, 0, bytes, offset, count);

                        // 增加偏移量
                        offset += count;
                        count = fs.Read(buffer, 0, buffer.Length);
                    }
                    project = serializer.Deserialize(bytes);
                    
                    // 设置文件名和地址
                    project.fileName = System.IO.Path.GetFileName(fileName);
                    project.dir = System.IO.Path.GetDirectoryName(fileName);
                }
            }
            catch
            {
                throw new SerializerException("文档已损坏!");
            }

            return project;
        }

修改

序列化


等待上传中...
2018年11月02日 18点11分 匹马西风

箭头指的符号怎么打

修改

编程开发语言


等待上传中...
2018年10月30日 16点53分 CristanoShow

结构化数据

请教一下:怎么将结构化*.cem文件的数据读取到数据库中。 修改

.cem 数据库


等待上传中...
2018年10月30日 15点08分 随缘随心

电脑开机一段时间后无法切换窗口 也不能切换输入法 以及中英文

电脑开机一段时间后无法切换窗口 也不能切换输入法 以及中英文 修改

输入法 死机 操作系统 Windows



帮助

反馈