我做了一个自动加载用户设置xml文件的程序,但一个问题是,当我在代码中添加新值时,程序试图读取没有“data5”值的xml文件时,程序返回一个错误:
当我关闭程序时,我得到了另一个关于另一个进程使用的文件的错误
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll
Additional information: The process cannot access the file 'C:\Users\xxxxx\AppData\Local\APK Easy Tool\cfg.xml' because it is being used by another process.
我不明白为什么文件仍然被锁定。它应该在read.close();
之后关闭。我试图让程序在读取xml之前创建一个新的xml值,但这不是一个好主意,因为它将替换修改后的值。这是我的密码
docs = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\APK";
if (File.Exists(docs + @"\cfg.xml"))
{
try
{
XmlSerializer xs = new XmlSerializer(typeof(Data));
FileStream read = new FileStream(docs + @"\cfg.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
Data info = (Data)xs.Deserialize(read);
signApkCheckBox.Checked = bool.Parse(info.Data1);
pathOfApk.Text = info.Data2;
pathOfDec.Text = info.Data3;
pathOfCom.Text = info.Data4;
disableDebugChkBox.Checked = bool.Parse(info.Data5);
read.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void ApkForm_FormClosed(object sender, FormClosedEventArgs e)
{
/*
Properties.Settings.Default.textBoxDec = pathOfDec.Text;
Properties.Settings.Default.textBoxCom = pathOfCom.Text;
Properties.Settings.Default.textBoxSelApk = pathOfApk.Text;
Properties.Settings.Default.checkSignApk = signApkCheckBox.Checked;
Properties.Settings.Default.Save();
*/
Data info = new Data();
info.Data1 = signApkCheckBox.Checked.ToString();
info.Data2 = pathOfApk.Text;
info.Data3 = pathOfDec.Text;
info.Data4 = pathOfCom.Text;
info.Data5 = disableDebugChkBox.Checked.ToString();
SaveXML.SaveData(info, docs + @"\cfg.xml");
}
using System.Xml.Serialization;
using System.IO;
namespace APK
{
public class SaveXML
{
public static void SaveData(object obj, string filename)
{
XmlSerializer sr = new XmlSerializer(obj.GetType());
TextWriter writer = new StreamWriter(filename);
sr.Serialize(writer, obj);
writer.Close();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace APK
{
public class Data
{
private string data1, data2, data3, data4, data5;
public string Data1
{
get { return data1; }
set { data1 = value; }
}
public string Data2
{
get { return data2; }
set { data2 = value; }
}
public string Data3
{
get { return data3; }
set { data3 = value; }
}
public string Data4
{
get { return data4; }
set { data4 = value; }
}
public string Data5
{
get { return data5; }
set { data5 = value; }
}
}
}
也许这不能解决问题,但在read.close();
之前,将read.endread();
放入或只是尝试在catch
语句上关闭它。但如前所述,最好的选择是这样做:
if (File.Exists(docs + @"\cfg.xml"))
{
try
{
using (FileStream read = new FileStream(docs + @"\cfg.xml", FileMode.Open, FileAccess.Read, FileShare.Read)){
XmlSerializer xs = new XmlSerializer(typeof(Data));
Data info = (Data)xs.Deserialize(read);
signApkCheckBox.Checked = bool.Parse(info.Data1);
pathOfApk.Text = info.Data2;
pathOfDec.Text = info.Data3;
pathOfCom.Text = info.Data4;
disableDebugChkBox.Checked = bool.Parse(info.Data5);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这样你就不需要担心关闭文件了,它是“自动”完成的。
问题内容: 我试图在我的appsettings.json文件中写入连接字符串,并将其带入我的启动文件中,但我不断得到一个Value不能为null。参数名称:connectionString。我一直在使用各种示例,但似乎看不到带有ASP.NET 1.0 Core启动类的新设置。 Appsetting.json文件: 尝试Startup.cs的方法 问题答案: 首先, 与在Visual Studio中
为了将位图转换为base64,我必须将位图转换为图像。当我将图像转换为时,在从屏幕拍摄位图(如或)转换图像后,我会得到这条消息,但当我使用本地存储的图像(如)时,它工作得很好。当我不想存储屏幕截图并每次都读一遍这是我尝试过的代码时,我该如何避免这个错误呢
哪个编译器就在这里?
我有一个简单的点网移动应用程序,具有自定义身份验证,如下示例:(https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-dotnet-backend-how-to-use-server-sdk#custom-认证) 我有一个生成JWT令牌的endpointhttps://test2ixresearch
我打算使用Python函数注释来指定静态工厂方法返回值的类型。我知道这是注释所需的用例之一。 PEP 3107规定: 函数注释只不过是在编译时将任意Python表达式与函数的各个部分关联起来的一种方式。 是Python中有效的表达式,不是吗?Python不同意,或者更确切地说,找不到名字:
我有返回给我一些JSON后端。 我将其解析为我的类: 然后我从服务器(使用rxJava)检索数据,没有任何错误。但是我预料到了一个错误,因为我认为我应该做这样的事情(以防止GSON转换器错误,因为在我的JSON响应中不存在): 在从后端接收数据并将其解析到带有构造函数的SomeData类(不带def值)之后,notNullableValue的值==NULL。 据我所知,在Kotlin中不是可空值可