【问题标题】:Write temp file and move to .ini file via interface causes Error in C#写入临时文件并通过接口移动到 .ini 文件导致 C# 中的错误
【发布时间】:2021-05-14 03:53:18
【问题描述】:

我有一个方法可以为我准备好所有必要的数据,然后我使用一个接口:

myFileCreator.Create(myData.ToString(), PathToWriteMyFile, SomeMoreDataAsAList);

我的界面:

public interface IMyIniFileCreator
{
    void Create(string dataName, string dataPath, List<SomeModes> modeList);

    void Delete(string dataName, string dataPath);
}

这里需要注意的是CreateDelete方法以前是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\...\123456789abc.ini'

这反过来又导致它在我的主要课程中没有进一步(第 1 行)。这可能是什么原因,它仍然可以与界面中的Task 一起使用(这里Task.CompletedTask返回)并且它不再与void 一起使用并且这个出现奇怪的错误消息,尽管它贯穿并且存在.ini 文件。

【问题讨论】:

标签: c# file task ini


【解决方案1】:

您正在呼叫MoveDirectory,用于移动目录

您应该调用 File.Move() 来移动文件。

【讨论】:

  • 我会试一试,但是为什么当它是Task 时它会起作用?因为退货?
  • @IanKemp 它在 100% 之前确实有效,这就是我感到困惑的原因。
  • @Ygalbel 它适用于您的解决方案。不幸的是,我还不清楚原因。我们的 FileSystemHelper 之前移动文件没有任何问题。但我刚刚看到它只适用于目录,我在文件级别。奇怪的是它以前有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2016-09-03
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2012-10-27
相关资源
最近更新 更多