PDA

View Full Version : خطای it is being used by another process.



niloo17
شنبه 06 آذر 1389, 07:59 صبح
سلام دوستان
من یک فایلی در برنامه دارم که از اون استفاده می کنم در حالت ویرایش سند می خوام فایل را با یک فایل دیگه جایگزین کنم که خطای
it is being used by another process.
چه جوری می تونم فایل را جایگزین کنم .

group45
شنبه 06 آذر 1389, 08:04 صبح
با سلامی به بلندای.... ولش کن
به احتمال 99.9999999 درصد شما چون قبلا داشتید همین فایل متنی تون رو ویرایش میکردید stream writer رو close نکردید.این رو چک کنید.

niloo17
شنبه 06 آذر 1389, 12:08 عصر
سلام ممنون از راهنمایتون
نوع فایل من هر چیزی امکان داره باشه
ودر فرم اصلی از اون استفاده می کنم .. در زمان ویرایش فایل می خوام فایل را عوض کنم یعنی با فایل جدید جایگزین کنم که این خطا را می ده
حالا باید چیکار کنم ؟؟؟؟

Reza_Yarahmadi
شنبه 06 آذر 1389, 12:34 عصر
اگه كدتون رو بذاريد بهتر ميشه كمكتون كرد.
احتمالا جايي كه داريد فايل رو ميخونيد بعد از خوندن ، فايل رو نمي بنديد. در آخر استفاده از فايل دستور بستن استريم مورد استفاده رو بنويسيد

niloo17
شنبه 06 آذر 1389, 13:12 عصر
من در برنامم یه سری فایل دارم که در مسیر برنام ذخیره شده و این فایل ا را در یک listview نمایش می دم .. حالا با انتخاب هر فایل می خوام اون فایل را ویرایش کنم وفایل را با یک فایل جدید جایگزین کنم و فایل جدید با اسم فایل قبلی در مسیر برنامه ذخیره بشه


string path = Archive.Properties.Settings.Default.FilePath + "Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString() + "\\" + ca.ID + ca.FileExtension;

File.Copy(openFileDialog.FileName, path, true);


موقع کپی کردن فایل اون خطا را میده
ممنون می شم اگه راهنماییم کنید .

Reza_Yarahmadi
شنبه 06 آذر 1389, 13:20 عصر
منظور من دستورات خوندن فايل بود نه دستورات كپي كردن. لطفا دستورات كامل خوندن فايلها رو بذاريد.
در ضمن اگر 2 آدرسي كه براي كپي كردن معرفي ميكنيد يكي باشه مسلما خطا ميده.

niloo17
شنبه 06 آذر 1389, 13:25 عصر
دو تا مسیر کپی یکی نیست
من فایل ها را از دیتا بیس می خونم و با استفاده از کدهای زیر اون ها در یک listview نمایش می دم



if (DTArchive.Rows.Count > 0)
{
int i = 0;
ImageList imglist = new ImageList();
imglist.ImageSize = new Size(size, size);
foreach (DataRow drarchive in DTArchive.Rows)
{
switch (drarchive["FatherKArchFileType"].ToString())
{
case "Picture":
FoundFile found = new FoundFile();
imglist.Images.Add(Image.FromFile(found.FilePath(A rchive.Properties.Settings.Default.FilePath + "\\Files\\" + drarchive["FatherKArchFileType"].ToString() + "\\" + drarchive["ArchiveID"].ToString() + drarchive["FileExtension"].ToString())));
break;
case "Music":
case "Video":
case "Text":
{
ico = new FileIcon(Archive.Properties.Settings.Default.FileP ath + "Files\\" + drarchive["FatherKArchFileType"].ToString() + "\\" + drarchive["ArchiveID"].ToString() + drarchive["FileExtension"].ToString());
imglist.Images.Add(ico.ShellIcon);
}
break;

}

listView.SmallImageList = imglist;
listView.LargeImageList = imglist;
listView.Items.Add("", i);
string[] info = new string[3] { drarchive["ArchiveID"].ToString(), drarchive["FileExtension"].ToString(), drarchive["FatherKArchFileType"].ToString() };
listView.Items[i].Tag = info;
i++;
}
}

Reza_Yarahmadi
شنبه 06 آذر 1389, 13:33 عصر
دوست عزيز مشكل شما جايي است كه كاربر روي ليست ويو كليك ميكنه و فايل رو باز ميكنه ، لطفا اون قسمت از كدهاتون رو بذاريد.

niloo17
شنبه 06 آذر 1389, 13:53 عصر
اخه در اون زمان اصلا فایل باز نمی شه من فقط ادرس فایل را به فرم ویرایش می فرستم و فایل را ویرایش می کنم

Reza_Yarahmadi
شنبه 06 آذر 1389, 14:02 عصر
خب وقتي آدرس فايل رو به فرم ويرايش ميفرستيد قبلش يا بعدش بايد فايل رو بخونيد(با دستورات Read) يا نه؟
اون بخشي كه داره اين كار رو انجام ميده بايد اصلاح بشه
كدي مثل كد زير

StreamReader sr = new StreamReader("File Path");
string text = sr.ReadToEnd();
sr.Close();
و يا

FileStream fs = new FileStream("File Path", FileMode.OpenOrCreate);
fs.Read(byteArray, 0, 1000);
fs.Close();
نوشتن اون Close ها مهمه.

niloo17
شنبه 06 آذر 1389, 18:55 عصر
ممنون از راهنماییتون
ولی فایل من که همیشه از نوع متنی نیست !!!


string path = Archive.Properties.Settings.Default.FilePath + "\\Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString() + "\\" + dt.Rows[0]["ID"].ToString() + dt.Rows[0]["FileExtension"].ToString();
switch (dt.Rows[0]["FatherKArchFileType"].ToString())
{
case "Picture":
arcgivepictureBox.Visible = true;
arcgivepictureBox.Image = Image.FromFile(path);
break;
case "Video":
case "Music":
axWindowsMediaPlayer.Visible = true;
axWindowsMediaPlayer.URL = path;
break;
case "Text":
archiverichTextBox.Visible = true;
StreamReader txt = new StreamReader(path);
archiverichTextBox.Text =txt.ReadToEnd();
txt.Close();
break;
}

Reza_Yarahmadi
یک شنبه 07 آذر 1389, 07:43 صبح
نميدونم درست متوجه شدم يا نه! شما يك سري فايل رو توي ليست ويو نمايش ميديد (همه در مسير مشخصي قرار دارند) و كاربر با كليك بر روي هر كدام از آيتم هاي اين ليست ابتدا يك پيش نمايش از فايل رو ميبينه و در صورت تمايل ميتونه اين فايل رو با فايل جديدي كه خودش انتخاب ميكنه جايگزين ميكنه.
اگر اين برداشتم درست باشه بخاطر نحوه كد نويسي شما اين خطا ظاهر ميشه.
براي مثال دستور زير تا زماني كه تصوير پيكچرباكس عوض نشه فايل رو قفل ميكنه يعني شما نميتونيد Cut , Delete ويا Replace كنيد.

arcgivepictureBox.Image = Image.FromFile(path);
براي حل اين مشكل ميتونيد بصورت زير عمل كنيد.

byte[] buffer = File.ReadAllBytes(Path);
MemoryStream ms = new MemoryStream(buffer);
pictureBox1.Image = Image.FromStream(ms);
براي فايلهاي صوتي و تصويري هم ميتونيد ابتدا فايل رو توي پوشه Temp كپي كنيد و فايل كپي رو به مديا پلير معرفي كنيد. در اين حالت چون فايل اصلي در حال اجرا نيست به راحتي ميتونيد اونو تغيير بديد.

niloo17
یک شنبه 07 آذر 1389, 08:11 صبح
سلام ممنون از راهنمایینون
منظور منو درست متوجه شدین من از روشی که شما گفتین استفاده کردم ولی بازم همون خطا را میده :ناراحت:

Reza_Yarahmadi
یک شنبه 07 آذر 1389, 08:30 صبح
روشی که شما گفتین استفاده کردم ولی بازم همون خطا را میده
كدي رو كه گذاشتم اول تست كردم بعد گذاشتمش ، روي سيستم من به خوبي كار ميكنه ، احتمال داره مشكل از جاي ديگه اي باشه. در صورت امكان برنامه رو اينجا بذاريد تا اونو اصلاح كنم و براتون بذارم.

niloo17
یک شنبه 07 آذر 1389, 08:38 صبح
کد قسمتی که listview پر می شه


modifietmelabel.Visible = createsdtimelabel.Visible = sizelabel.Visible = extlabel.Visible = false;
if (categorytreeView.SelectedNode != null)
detaillabel.Text = categorytreeView.SelectedNode.Nodes.Count.ToString () + " زیر گروه ";
detaillabel.Visible = detailpictureBox.Visible = true;
detailpictureBox.SizeMode = PictureBoxSizeMode.Zoom;
detailpictureBox.Image = Archive.Properties.Resources.Folder_Generic_Black;
listView.Items.Clear();

DTArchive = clsArchiveRecordsViewFactory.GetAllByFieldDT(clsAr chiveRecordsView.clsArchiveRecordsViewFields.ID, "-1");
DataTable dt = clsArchiveRecordsViewFactory.GetAllByFieldDT(clsAr chiveRecordsView.clsArchiveRecordsViewFields.Recor dID, 1);
if (categorytreeView.SelectedNode != null)
{
DataRow[] dr = dt.Select("CategoryID=" + categorytreeView.SelectedNode.Name);
foreach (DataRow drs in dr)
{
DTArchive.ImportRow(drs);
}
if (categorytreeView.SelectedNode.Nodes.Count > 0)
FillChildNode(categorytreeView.SelectedNode, dt);
FileIcon ico = new FileIcon();

if (DTArchive.Rows.Count > 0)
{
int i = 0;
ImageList imglist = new ImageList();
imglist.ImageSize = new Size(size, size);
foreach (DataRow drarchive in DTArchive.Rows)
{
switch (drarchive["FatherKArchFileType"].ToString())
{
case "Picture":
FoundFile found = new FoundFile();
byte[] buffer = File.ReadAllBytes(Archive.Properties.Settings.Defa ult.FilePath + "\\Files\\" + drarchive["FatherKArchFileType"].ToString() + "\\" + drarchive["ArchiveID"].ToString() + drarchive["FileExtension"].ToString());
MemoryStream ms = new MemoryStream(buffer);
imglist.Images.Add(Image.FromStream(ms));
ms.Close();
ms.Dispose();
break;
case "Music":
case "Video":
case "Text":
{
ico = new FileIcon(Archive.Properties.Settings.Default.FileP ath + "Files\\" + drarchive["FatherKArchFileType"].ToString() + "\\" + drarchive["ArchiveID"].ToString() + drarchive["FileExtension"].ToString());
imglist.Images.Add(ico.ShellIcon);
}
break;
}
listView.SmallImageList = imglist;
listView.LargeImageList = imglist;
listView.Items.Add("", i);
string[] info = new string[3] { drarchive["ArchiveID"].ToString(), drarchive["FileExtension"].ToString(), drarchive["FatherKArchFileType"].ToString() };
listView.Items[i].Tag = info;
i++;
}
}
}


کد قسمتی که فرم جدید برای ویرایش پر می شه


private void FillForm()
{
arcgivepictureBox.Visible = archiverichTextBox.Visible = axWindowsMediaPlayer.Visible = false;
DataTable dt = clsArchiveViewFactory.GetAllByFieldDT(clsArchiveVi ew.clsArchiveViewFields.ID, ArchiveID);
DataTable dtcategory = clsArchiveRecordsViewFactory.GetAllByFieldDT(clsAr chiveRecordsView.clsArchiveRecordsViewFields.Archi veID, ArchiveID);
rdateTextBox.Text = dt.Rows[0]["RDate"].ToString();
securitycomboBox.SelectedValue = dt.Rows[0]["SecurityID"].ToString();
descriptiontextBox.Text = dt.Rows[0]["Description"].ToString();
readonlycheckBox.Checked = Convert.ToBoolean(dt.Rows[0]["IsReadOnly"]);
FindCategory(dtcategory.Rows[0]["CategoryID"].ToString());

string path = Archive.Properties.Settings.Default.FilePath + "\\Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString() + "\\" + dt.Rows[0]["ID"].ToString() + dt.Rows[0]["FileExtension"].ToString();
switch (dt.Rows[0]["FatherKArchFileType"].ToString())
{
case "Picture":
arcgivepictureBox.Visible = true;
byte[] buffer = File.ReadAllBytes(path);
MemoryStream ms = new MemoryStream(buffer);
arcgivepictureBox.Image = Image.FromStream(ms);
ms.Close();
break;
case "Video":
case "Music":
axWindowsMediaPlayer.Visible = true;
axWindowsMediaPlayer.URL = path;
break;
case "Text":
archiverichTextBox.Visible = true;
StreamReader txt = new StreamReader(path);
archiverichTextBox.Text =txt.ReadToEnd();
txt.Close();
break;
}
}


کد قسمت ذخیره که خطا می ده


private void savebutton_Click(object sender, EventArgs e)
{
if (categorytreeView.SelectedNode != null)
{
clsArchive ca = new clsArchive();
ca.Description = descriptiontextBox.Text;
ca.IsReadOnly = readonlycheckBox.Checked;
ca.RDate = rdateTextBox.Text;
ca.SecurityID = Convert.ToInt32(securitycomboBox.SelectedValue);
if (Mode == "Add")
{
if (openFileDialog.FileName != "" || arcgivepictureBox.Image != null)
{
if (openFileDialog.FileName != "") file = new FileInfo(openFileDialog.FileName);
else if (arcgivepictureBox.Image != null)
file = new FileInfo(Application.StartupPath + "/scan/new.jpg");
DataTable dt = clsCArchFileTypeFactory.GetAllByFieldDT(clsCArchFi leType.clsCArchFileTypeFields.KArchFileType, filetype.Substring(1));
if (dt.Rows.Count > 0)
{
ca.FileExtension = file.Extension;
ca.FileTypeID = Convert.ToInt32(dt.Rows[0]["ID"].ToString());
clsArchiveFactory.Insert(ca);
clsArchiveRecords ar = new clsArchiveRecords();
ar.ArchiveID = ca.ID;
ar.CategoryID = Convert.ToInt32(categorytreeView.SelectedNode.Name );
ar.RecordID = 1;
clsArchiveRecordsFactory.Insert(ar);
if (!Directory.Exists(Archive.Properties.Settings.Def ault.FilePath + "Files"))
{
Directory.CreateDirectory(Archive.Properties.Setti ngs.Default.FilePath + "Files");
}
if (!Directory.Exists(Archive.Properties.Settings.Def ault.FilePath + "Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString()))
{
Directory.CreateDirectory(Archive.Properties.Setti ngs.Default.FilePath + "Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString());
}
string path = Archive.Properties.Settings.Default.FilePath + "Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString() + "\\" + ca.ID + ca.FileExtension;
if (openFileDialog.FileName != "") File.Copy(openFileDialog.FileName, path);
else if (arcgivepictureBox.Image != null) File.Copy(Application.StartupPath+"/scan/new.jpg",path);
IDCategory = Convert.ToInt32(categorytreeView.SelectedNode.Name );
ArchiveID = ca.ID;
this.Close();
}
else
MessageBox.Show("فرمت فایل قابل قبول نیست .", "خطا", MessageBoxButtons.OKCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);

}
else
{
MessageBox.Show("فایل را انتخاب کنید .", "خطا", MessageBoxButtons.OKCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}
}
else if (Mode == "Edit")
{
DataTable dtarchive = clsArchiveFactory.GetAllByFieldDT(clsArchive.clsAr chiveFields.ID, ArchiveID);
ca.ID = ArchiveID;
if (openFileDialog.FileName != "")
{
FileInfo file = new FileInfo(openFileDialog.FileName);
DataTable dt = clsCArchFileTypeFactory.GetAllByFieldDT(clsCArchFi leType.clsCArchFileTypeFields.KArchFileType, filetype.Substring(1));
if (dt.Rows.Count > 0)
{
ca.FileExtension = file.Extension;
ca.FileTypeID = Convert.ToInt32(dt.Rows[0]["ID"].ToString());

if (!Directory.Exists(Archive.Properties.Settings.Def ault.FilePath + "Files"))
{
Directory.CreateDirectory(Archive.Properties.Setti ngs.Default.FilePath + "Files");
}
if (!Directory.Exists(Archive.Properties.Settings.Def ault.FilePath + "Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString()))
{
Directory.CreateDirectory(Archive.Properties.Setti ngs.Default.FilePath + "Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString());
}
string path = Archive.Properties.Settings.Default.FilePath + "Files\\" + dt.Rows[0]["FatherKArchFileType"].ToString() + "\\" + ca.ID + ca.FileExtension;
File.Copy(openFileDialog.FileName, path, true);
}
else
{
MessageBox.Show("فرمت فایل قابل قبول نیست .", "خطا", MessageBoxButtons.OKCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}
}
else
{
ca.FileExtension = dtarchive.Rows[0]["FileExtension"].ToString();
ca.FileTypeID = Convert.ToInt32(dtarchive.Rows[0]["FileTypeID"]);
}
clsArchiveFactory.Update(ca);
IDCategory = Convert.ToInt32(categorytreeView.SelectedNode.Name );
ArchiveID = ca.ID;
this.Close();
}
}
else
MessageBox.Show("نوع سند را انتخاب کنید .", "خطا", MessageBoxButtons.OKCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}