Почему возникает исключение System.IO.IOException: «Процесс не может получить доступ к файлу... потому что он используетC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему возникает исключение System.IO.IOException: «Процесс не может получить доступ к файлу... потому что он использует

Сообщение Anonymous »

Как решить и избежать получения этого исключения?
в форме 1 у меня есть этот код события нажатия кнопки

Код: Выделить всё

private async void buttonAnalyze_Click(object sender, EventArgs e)
{
if (_pointsOnImage.Count > 0 && _segmentAnalyzer != null)
{
string outputFilePath = Path.Combine(jsonFilesFolder, "analysis.csv");
var progress = new Progress(frameNumber =>
{
trackBarFrames.Value = frameNumber;
labelFrames.Text = $"Analyzing frame {frameNumber + 1}/{_totalFrames}";
});

await _segmentAnalyzer.GenerateCsvFileAsync(_totalFrames, _videoCapture, outputFilePath, progress);
MessageBox.Show("Analysis complete. CSV file saved.");
}
else
{
if (_pointsOnImage.Count == 0)
{
MessageBox.Show("_pointsOnImage list contains no elements.");
}

if (_segmentAnalyzer == null)
{
MessageBox.Show("Make sure that _segmentAnalyzer is not null.");
}
}
}
и в классе SegmentAnalyzer у меня есть код этого метода

Код: Выделить всё

public async Task GenerateCsvFileAsync(int totalFrames, VideoCapture videoCapture, string outputFilePath, IProgress progress)
{
int squareSize = CalculateSquareSize();
using (StreamWriter writer = new StreamWriter(outputFilePath))
{
await writer.WriteLineAsync("FRAME_NUMBER,MINUS,LEFTDIGIT_TOP,LEFTDIGIT_LEFTTOP,...,RIGHTDIGIT_RIGHTBOTTOM,RIGHTDIGIT_BOTTOM");

for (int frameNumber = 0; frameNumber < totalFrames; frameNumber++)
{
videoCapture.Set(VideoCaptureProperties.PosFrames, frameNumber);
Mat frame = new Mat();
if (videoCapture.Read(frame))
{
Bitmap bitmap = BitmapConverter.ToBitmap(frame);
bmp = bitmap;
string line = $"{frameNumber}";

foreach (var point in _pointsOnImage)
{
Rectangle square = new Rectangle(point.X - squareSize / 2, point.Y - squareSize / 2, squareSize, squareSize);
double grayLevelAverage = CalculateGrayLevelAverage(square);
line += $",{grayLevelAverage}";
}

await writer.WriteLineAsync(line);
}
progress?.Report(frameNumber);
}
}
}
исключение находится в строке:

Код: Выделить всё

using (StreamWriter writer = new StreamWriter(outputFilePath))
System.IO.IOException: «Процесс не может получить доступ к файлу «d:\savedpoints\anaлиз.csv», поскольку он используется другим процессом».

Подробнее здесь: https://stackoverflow.com/questions/786 ... s-the-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»