我有一些麻烦,这个错误在Visual Studio“因为它正在使用由另一个进程的进程无法访问该文件”:错误:在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.
我曾尝试: 我试过使用这些代码从其他解决StackOverflow问题获得类似于我的尝试解决问题 - 但即使这似乎并没有工作? 我试过checking if the file is in use,但没有成功。
我也以管理员身份运行Visual Studio。
该文件不是只读的。
该文件夹未打开,并且该文件在执行代码时未在其他任何程序中使用 - 至少不是我可以看到/知道的。
代码: 所以,在一定范围内添加到我的代码:我写一些简单的手势检测代码到Kinect的C#BodyBasics SDK V2代码免费提供。这是我添加的一个辅助方法,当人们看到时会被调用。如果该人正在执行手势,则该方法将帧时间和手势名称写入文本文件。
有一半的时间,当代码工作时,手势识别效果很好。然而,另一半时间,代码打破/停止,因为写入文件位会导致错误。
下面是我的代码,看看这个人是否站在中立位置 - 它有点waffly,所以很抱歉。我有评论“错误”,其中错误的是(意料之中):
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
}
}
}
任何解决方案/意见/建议点我在正确的轨道上,将不胜感激。我认为使用'使用streamwriter'方法而不是我在这里使用的方法会很好 - 但我不知道如何?任何帮助,将不胜感激。
Additonal Info:使用Visual Studio 2015;使用Windows 10.
旁注:我读过的地方,Windows 10中的Windows搜索工具可能会干扰并导致这样的问题,所以我需要禁用它?
您是否试图按照[此处]所述的'FileStream'打开文件(https://msdn.microsoft.com/zh-cn/library/5h0z48dh (v = vs.110).aspx),然后附加文字? – Harry
这些问题几乎总是由您在自己的程序中打开文件造成的,并且永远不会关闭它。在你的程序中搜索'swipe.txt'文件并确保它被打开,修改,然后很快关闭。 –
让这段代码在工作线程上运行是另一种简单的解释。如果它运行不止一次,那么你会遇到这个问题。当遇到异常时,使用Debug> Windows> Threads,使用'lock'语句使其成为线程安全的。 –