ich mit diesem Fehler in Visual Studio einige Probleme habe:Fehler: ‚Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird‘
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll
Additional information: The process cannot access the file 'C:\Users\aheij\Desktop\KinectOutput\swipe.txt' because it is being used by another process.
Was ich versucht habe: Ich habe versucht, diese Codes zu verwenden, die von anderen gelösten StackOverflow-Fragen erhalten wurden, ähnlich wie bei mir, um das Problem zu lösen - aber selbst das schien nicht zu funktionieren? Ive versuchte checking if the file is in use, aber ohne Erfolg.
Ich auch Visual Studio als Administrator ausführen.
Die Datei ist nicht schreibgeschützt.
Der Ordner ist nicht geöffnet, und die Datei wird in keinem anderen Programm verwendet, wenn ich den Code ausführe - zumindest nicht, was ich sehen/wissen kann.
Der Code: Also, einige Kontext zu meinem Code hinzufügen: Ich bin ein paar schnelle Geste Erkennungscode an die Kinect C# BodyBasics SDK v2 Code frei verfügbar zu schreiben. Dies ist eine Hilfsmethode, die ich hinzugefügt habe und die aufgerufen wird, wenn eine Person in Sicht ist. Wenn diese Person die Geste ausführt, schreibt die Methode die Bildzeit und den Gestennamen in eine Textdatei.
Die Hälfte der Zeit, wenn der Code funktioniert, funktioniert die Gestenerkennung gut. In der anderen Hälfte der Zeit bricht der Code jedoch ab, weil das Schreiben in das Dateibit den Fehler verursacht.
Unten ist mein Code, um zu sehen, ob die Person in der neutralen Position steht - es ist ein bisschen waffel, also Entschuldigung dafür. Ich habe ‚ERROR‘ kommentiert, wo der Fehler ist (wenig überraschend):
private void Neutral_stance(VisualStyleElement.Tab.Body body, IReadOnlyDictionary<JointType, Joint> joints, IDictionary<JointType, Point> jointPoints, BodyFrame bf)
{
CameraSpacePoint left_hand = joints[JointType.HandLeft].Position;
CameraSpacePoint left_elbow = joints[JointType.ElbowLeft].Position;
CameraSpacePoint left_shoulder = joints[JointType.ShoulderLeft].Position;
CameraSpacePoint left_hip = joints[JointType.HipLeft].Position;
CameraSpacePoint right_hand = joints[JointType.HandRight].Position;
CameraSpacePoint right_elbow = joints[JointType.ElbowRight].Position;
CameraSpacePoint right_shoulder = joints[JointType.ShoulderRight].Position;
CameraSpacePoint right_hip = joints[JointType.HipRight].Position;
double vertical_error = 0.15;
double shoulderhand_xrange_l = Math.Abs(left_hand.X - left_shoulder.X);
double shoulderhand_xrange_r = Math.Abs(right_hand.X - right_shoulder.X);
if (bf != null)
{
TimeSpan frametime = bf.RelativeTime;
string path_p = @"C:\Users\aheij\Desktop\KinectOutput\Punch.txt"; //write to punch file
string path_s = @"C:\Users\aheij\Desktop\KinectOutput\swipe.txt"; //write to swipe file
if (left_hand.Y < left_elbow.Y)
{
if (right_hand.Y < right_elbow.Y)
{
if (shoulderhand_xrange_l < vertical_error)
{
if (shoulderhand_xrange_r < vertical_error)
{
Gesture_being_done.Text = " Neutral";
File.AppendAllText(path_p, frametime.ToString() + " Neutral" + Environment.NewLine); //ERROR
File.AppendAllText(path_s, frametime.ToString() + " Neutral" + Environment.NewLine); //ERROR
}
}
}
}
else
{
Gesture_being_done.Text = " Unknown";
File.AppendAllText(path_p, frametime.ToString() + " Unknown" + Environment.NewLine); //ERROR
File.AppendAllText(path_s, frametime.ToString() + " Unknown" + Environment.NewLine); //ERROR
}
}
}
Alle Lösungen/Ideen/Anregungen mich auf dem richtigen Weg zeigen würde geschätzt. Ich denke, es wäre gut, die 'using streamwriter'-Methode zu verwenden, im Gegensatz zu der Methode, die ich hier verwende - aber ich bin mir nicht sicher, wie? Jede Hilfe wäre willkommen.
Weitere Informationen: Verwenden von Visual Studio 2015; Verwenden von Windows 10.
Seitennotiz: Ich habe irgendwo gelesen, dass das Windows-Suchwerkzeug in Windows 10 stören kann und solche Probleme verursachen, also muss ich es deaktivieren?
Haben Sie versucht, die Datei als 'FileStream' zu öffnen, wie beschrieben [hier] (https://msdn.microsoft.com/en-us/library/5h0z48dh (v = vs.110) .aspx), und fügen Sie dann den Text an? – Harry
Diese Probleme werden fast immer dadurch verursacht, dass Sie die Datei in Ihrem eigenen Programm öffnen und niemals schließen. Suchen Sie überall dort, wo die Datei 'swipe.txt' in Ihrem Programm verwendet wird und stellen Sie sicher, dass sie geöffnet, geändert und bald geschlossen wird. –
Die Ausführung dieses Codes in einem Arbeitsthread ist eine weitere einfache Erklärung. Wenn es mehr als einmal ausgeführt wird, haben Sie dieses Problem. Verwenden Sie Debug> Windows> Threads, wenn Sie die Ausnahme erhalten, machen Sie sie threadsicher mit der Anweisung 'lock'. –