У меня есть следующий код для записи некоторых текущих позиций в файл:
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);
}
}
У меня есть ошибка, сообщающая мне, что процесс не может использовать файл по адресу (путь ..), потому что он уже используется. Я попытался перезапустить и удалить файл (он действительно работал один раз), но ничего не работает. Могу ли я написать его по-другому, чтобы он работал, и каждый раз, когда я его запускаю, создается новый файл?
И еще один вопрос: если кто-то знает, почему он сохраняет только одну позицию ... позиция обновляется каждые несколько миллисекунд, и я хочу, чтобы каждая позиция в этом файле, а не только одна ... как я должен это делать?
То же самое отлично работает в консоли, также каждый раз выдавая новые позиции, но не в файле.
Ваш первый вопрос: поскольку файл уже используется, вам нужно выяснить, почему. Совет от профессионала, наверное, это ваш код. Что касается вашего второго вопроса, я не уверен, что это за позиция, и на него не хватает подходящей информации для ответа
Вы должны либо вызвать 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;
}
}
Пожалуйста, опубликуйте ошибку