Записать текст в файл System.IO.IOException - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующий код для записи некоторых текущих позиций в файл:

while (onvifPTZ != null)
{
    string[] lines = {"\t Act Value [" + curPan.ToString() +
        "," + curTilt.ToString() +
        "," + curZoom.ToString() + "]","\t Ref Value [" + newPTZRef.pan.ToString() +
        "," + newPTZRef.tilt.ToString() +
        "," + newPTZRef.zoom.ToString() + "]", "\t Dif Value [" + dPan.ToString() +
        "," + dTilt.ToString() +
        "," + dZoom.ToString() + "]" + Environment.NewLine };

    string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

    using (StreamWriter outputFile = new StreamWriter(Path.Combine(mydocpath, "WriteLines1.txt")))
    {
        foreach (string line in lines)
            outputFile.WriteLine(line);
    }
}

У меня есть ошибка, сообщающая, что процесс не может использовать файл в (путь ..), потому что его ужев использовании.Я попытался перезапустить и удалить файл (на самом деле он работал один раз), но ничего не работает.Могу ли я написать его по-другому, чтобы он работал, и каждый раз, когда я запускаю его, он создает новый файл?

И другой вопрос, если кто-то знает, почему он сохраняет только одну позицию ... позиция обновляется каждые несколько миллисекунд иЯ хочу каждую позицию в этом файле, а не только одну ... как я должен это сделать?

То же самое прекрасно работает в консоли, также каждый раз дает новые позиции, но не в файле.

1 Ответ

0 голосов
/ 04 декабря 2018

Вы должны либо вызвать StreamWriter.Flush (), либо установить StreamWriter.AutoFlush = true

Кроме того, до или после записи я обычно проверяю, заблокирован ли файл другим процессом:

    bool b = false;
    while(!b)
    {
        b = IsFileReady(fileName)
    }

...

    /// <summary>
    /// Checks if a file is ready
    /// </summary>
    /// <param name="sFilename"></param>
    /// <returns></returns>
    public static bool IsFileReady(string sFilename)
    {
        // If the file can be opened for exclusive access it means that the file
        // is no longer locked by another process.
        try
        {
            using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                return inputStream.Length > 0;
            }
        }
        catch (Exception)
        {
            return false;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...