У меня есть метод, который готовит для меня все необходимые данные, а затем я работаю с интерфейсом:

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\...\123456789abc.ini'

Это, в свою очередь, приводит к тому, что в моем основном классе он не идет дальше (строка 1). Что может быть причиной этого, что он все еще работал с Task в интерфейсе (здесь Task.CompletedTask был возвращен ), и он не работает с void, и появляется это странное сообщение об ошибке, хотя оно проходит и файл .ini существует.

0
41 72 6c 10 Фев 2021 в 15:51

1 ответ

Лучший ответ

Вы звоните на MoveDirectory, который предназначен для перемещения каталогов .

Вместо этого вам следует вызвать File.Move() для перемещения файлов.

3
41 72 6c 10 Фев 2021 в 18:44