我有一些麻煩,這個錯誤在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'語句使其成爲線程安全的。 –