J'ai quelques problèmes avec cette erreur dans Visual Studio:Erreur: « Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus » dans Visual Studio C#
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.
Ce que j'ai essayé: J'ai essayé d'utiliser ces codes obtenus à partir d'autres questions StackOverflow résolues similaires à la mienne pour essayer de résoudre le problème - mais même cela ne semblait pas fonctionner? J'ai essayé checking if the file is in use, mais sans succès. Je exécute également Visual Studio en tant qu'administrateur.
Le fichier n'est pas en lecture seule.
Le dossier n'est pas ouvert, et le fichier n'est utilisé dans aucun autre programme lors de l'exécution du code - du moins pas que je puisse voir/connaître.
Le code: Donc, pour ajouter un contexte à mon code: Je suis en train d'écrire un code de détection de geste rapide au code SDK Kinect C# v2 de BodyBasics disponible gratuitement. C'est une méthode d'aide que j'ai ajoutée, qui est appelée quand une personne est en vue. Si cette personne exécute le geste, la méthode écrit l'heure et le nom du geste dans un fichier texte.
La moitié du temps, lorsque le code fonctionne, la reconnaissance gestuelle fonctionne bien. Cependant, l'autre moitié du temps, le code se casse/s'arrête parce que l'écriture dans le bit de fichier provoque l'erreur.
Ci-dessous est mon code pour voir si la personne est debout dans la position neutre - c'est un peu désagréable, donc excuses à ce sujet. Je l'ai commenté « erreur » où l'erreur est (sans surprise):
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
}
}
}
Toutes les solutions/idées/suggestions pour me diriger sur la bonne voie serait apprécié. Je pense qu'il serait bon d'utiliser la méthode 'using streamwriter' par opposition à la méthode que j'utilise ici - mais je ne sais pas comment? Toute aide serait appréciée.
Additionnel Info: Utilisation de Visual Studio 2015; Utilisation de Windows 10.
Sidenote: J'ai lu quelque part que l'outil Windows Search dans Windows 10 peut interférer et causer des problèmes comme celui-ci, donc je dois le désactiver?
Avez-vous essayé d'ouvrir le fichier en tant que 'FileStream' comme décrit [ici] (https://msdn.microsoft.com/fr-fr/library/5h0z48dh (v = vs.110) .aspx), puis ajoutez le texte? – Harry
Ces problèmes sont presque toujours causés par l'ouverture du fichier dans votre propre programme et ne jamais le fermer. Recherchez partout où le fichier 'swipe.txt' est utilisé dans votre programme et assurez-vous qu'il est ouvert, modifié, puis fermé bientôt. –
L'exécution de ce code sur un thread de travail est une autre explication simple. Si cela fonctionne plus d'une fois, vous aurez ce problème. Utilisez Debug> Windows> Threads lorsque vous obtenez l'exception, faites-le thread-safe avec l'instruction 'lock'. –