写入临时文件并通过接口移动到 .ini 文件导致 C# 中的错误
Write temp file and move to .ini file via interface causes Error in C#
我有一个方法可以为我准备所有必要的数据,然后我使用一个界面:
myFileCreator.Create(myData.ToString(), PathToWriteMyFile, SomeMoreDataAsAList);
我的界面:
public interface IMyIniFileCreator
{
void Create(string dataName, string dataPath, List<SomeModes> modeList);
void Delete(string dataName, string dataPath);
}
这里需要注意的是Create
和Delete
方法之前是Task
所以
public interface IMyIniFileCreator
{
Task Create(string dataName, string dataPath, List<SomeModes> modeList);
Task Delete(string dataName, string dataPath);
}
Create() 如下所示,在这里应该可以正常工作:
public class MyIniFileCreator : ComponentBase,
IMyIniFileCreator
{
public void Create(string dataName, string dataPath, List<SomeModes> modeList)
{
var pathToMode = Path.Combine(appDataPath, modeName + ".ini");
var tempFile = Path.ChangeExtension(pathToMode, "tmp");
var listOfSection = new List<IniSection>();
// some more code with list of sections etc.
var modeFileInfo = new IniDocument();
modeFileInfo.AddRange(listOfSection);
Check.State(tempFile.IsNotNullOrEmpty(), "modes.ini does not exist");
File.WriteAllText(tempFile, SimpleIniParser.WriteSections(modeFileInfo), Encoding.Default);
// This is needed when something changes in the file.
// Here the old ini must be deleted and the new one written.
// Unfortunately we do not have a `ForceMove` available.
FileSystemHelper.DeleteFileIfExisting(pathToMode);
FileSystemHelper.MoveDirectory(tempFile, pathToMode);
}
}
代码也贯穿始终,我的modeName.ini
文件也存在,并且已被完整正确地描述。
但是抛出错误
Unable to create directory 'C:\...\data\...3456789abc.ini'
这反过来又导致它在我的主要 class(第 1 行)中不再继续。这可能是什么原因,它仍然与界面中的 Task
一起工作(这里 Task.CompletedTask
被 返回 )并且它不适用于void
了,并且出现了这个奇怪的错误消息,尽管它一直运行并且存在 .ini
文件。
您正在呼叫 MoveDirectory
,这是为了移动 目录。
相反,您应该调用 File.Move()
来移动文件。
我有一个方法可以为我准备所有必要的数据,然后我使用一个界面:
myFileCreator.Create(myData.ToString(), PathToWriteMyFile, SomeMoreDataAsAList);
我的界面:
public interface IMyIniFileCreator
{
void Create(string dataName, string dataPath, List<SomeModes> modeList);
void Delete(string dataName, string dataPath);
}
这里需要注意的是Create
和Delete
方法之前是Task
所以
public interface IMyIniFileCreator
{
Task Create(string dataName, string dataPath, List<SomeModes> modeList);
Task Delete(string dataName, string dataPath);
}
Create() 如下所示,在这里应该可以正常工作:
public class MyIniFileCreator : ComponentBase,
IMyIniFileCreator
{
public void Create(string dataName, string dataPath, List<SomeModes> modeList)
{
var pathToMode = Path.Combine(appDataPath, modeName + ".ini");
var tempFile = Path.ChangeExtension(pathToMode, "tmp");
var listOfSection = new List<IniSection>();
// some more code with list of sections etc.
var modeFileInfo = new IniDocument();
modeFileInfo.AddRange(listOfSection);
Check.State(tempFile.IsNotNullOrEmpty(), "modes.ini does not exist");
File.WriteAllText(tempFile, SimpleIniParser.WriteSections(modeFileInfo), Encoding.Default);
// This is needed when something changes in the file.
// Here the old ini must be deleted and the new one written.
// Unfortunately we do not have a `ForceMove` available.
FileSystemHelper.DeleteFileIfExisting(pathToMode);
FileSystemHelper.MoveDirectory(tempFile, pathToMode);
}
}
代码也贯穿始终,我的modeName.ini
文件也存在,并且已被完整正确地描述。
但是抛出错误
Unable to create directory 'C:\...\data\...3456789abc.ini'
这反过来又导致它在我的主要 class(第 1 行)中不再继续。这可能是什么原因,它仍然与界面中的 Task
一起工作(这里 Task.CompletedTask
被 返回 )并且它不适用于void
了,并且出现了这个奇怪的错误消息,尽管它一直运行并且存在 .ini
文件。
您正在呼叫 MoveDirectory
,这是为了移动 目录。
相反,您应该调用 File.Move()
来移动文件。