PDA

View Full Version : سوال: نخواندن پوشه d:\System Volume Information درون درایو



alexmcse
جمعه 31 شهریور 1391, 19:13 عصر
در درایو مثلا d:\ فولدری بنام d:\System Volume Information
وجود دارد
برنامه ای است
که محتویات فولدر های درایو d:\ را درون یک کمبوباکس قرار میدهد

موقع run برنامه پیغام زیر را میدهد

چگونه میتوان کدی نوشت که کامپیوتر این فولدر d:\System Volume Information را نخواند و فولدر بعدی رابخواند
چگونه میتوان این کار را انجام داد

:تشویق::تشویق:

harani
جمعه 31 شهریور 1391, 19:27 عصر
به نظر من مسیر فایلتو کامل تعریف نکردی مثلاً از مسیر زیر باید استفاده کنی :

string SerarchPath = @"E:\System Valume Information\MyFile.txt";

FastCode
جمعه 31 شهریور 1391, 20:57 عصر
دوست عزیز,
من مطمئنم نود درصد کسایی که پست شما رو دیدن تا حالا این مشکل رو برای خودشون حل کردن.
ولی جواب شما رو نمیدن.من هم نمیدم.
چون وقتی شما عکس کدت رو میزاری من هم عکس بلد بودنم رو میزارم.
متن کدتون رو بزارید.

m0hammad_01
جمعه 31 شهریور 1391, 23:41 عصر
سلام
این پیغامی که میده به خاطر این هست که این پوشه سیستمی هست و توسط ویندوز محافظت میشه و اجازه دسترسی رو بهتون نمیده.
چیزی که به نظرم میاد اینه که باید این پوشه رو تو کدتون به عنوان اسثنا بیارین که ازش عبور کنه.اگه کد یا راه حلی به ذهنم رسید اینجا میذارم!

alexmcse
شنبه 01 مهر 1391, 07:41 صبح
دوست عزیز,
من مطمئنم نود درصد کسایی که پست شما رو دیدن تا حالا این مشکل رو برای خودشون حل کردن.
ولی جواب شما رو نمیدن.من هم نمیدم.
چون وقتی شما عکس کدت رو میزاری من هم عکس بلد بودنم رو میزارم.
متن کدتون رو بزارید.




کد من اینه

ArrayList al = new ArrayList();
private void files(string str)
{
string searchpatern = combo_search_patern.Text.Trim ();
DirectoryInfo dinfo = new DirectoryInfo(str);

FileInfo[] files = dinfo.GetFiles
(searchpatern);
foreach (FileInfo itemf in files)
{

listView1.Items.Add(itemf.FullName);
al.Add(itemf.Name);
}

label1.Text = al.Count.ToString();


}


public void pathfile()
{
DirectoryInfo dinfo = new DirectoryInfo(combo_drive.Text );
DirectoryInfo[] di = dinfo.GetDirectories();

FileInfo[] file = dinfo.GetFiles(combo_search_patern.Text);
foreach (FileInfo item in file)
{
listView1.Items.Add(item.FullName);
}
foreach (DirectoryInfo item in di)
{
string s = combo_drive.Text + "\\" + item.Name;
files(s);

}
}

private void button1_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
pathfile();
}

:تشویق::تشویق:

alexmcse
شنبه 01 مهر 1391, 08:28 صبح
سلام
این پیغامی که میده به خاطر این هست که این پوشه سیستمی هست و توسط ویندوز محافظت میشه و اجازه دسترسی رو بهتون نمیده.
چیزی که به نظرم میاد اینه که باید این پوشه رو تو کدتون به عنوان اسثنا بیارین که ازش عبور کنه.اگه کد یا راه حلی به ذهنم رسید اینجا میذارم!

حق با شماست
ولی راه حل چیه؟

:تشویق:

m0hammad_01
شنبه 01 مهر 1391, 11:50 صبح
ولی راه حل چیه؟
خودتون کد رو نوشتین بهتر میتونید تغییرش بدین و باهاش بازی کنید.این هم راه حل:
اونجایی که میخواد فایلهای داخل پوشه مورد نظر رو فراخوانی کنه، بیاین Try - Catch بذارین. اینطوری وقتی به فایلهای مشکل دار رسید، میره تو Catch و در عمل برنامتون ازش عبور میکنه.
این کد ها شاید کمکتون کنه:
msdn.microsoft.com/en-us/library/bb513869.aspx (http://barnamenevis.org/msdn.microsoft.com/en-us/library/bb513869.aspx)
http://www.daniweb.com/software-development/csharp/threads/419834/problem-how-to-skipthe-access-to-path-fsystem-file-volume-is-denied

uniqueboy_ara
شنبه 01 مهر 1391, 11:52 صبح
من خودم برای دور زدن این مشکل از try / catch استفاده کردم
هر فولدری که دسترسی بهش ممنوع باشه، به راحتی نادیده گرفته میشه و میره سراغ بعد

me_eshaghi
دوشنبه 03 مهر 1391, 09:52 صبح
امتحان بزن
خودم با اين روش درست كار كرده

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Archivemultimedia
{
public partial class Formin_Auto : Form
{
public Formin_Auto()
{
InitializeComponent();
}


private void Formin_Auto_Load(object sender, EventArgs e)
{

insert_drive();
}
public void insert_drive()
{
DriveInfo[] drive = DriveInfo.GetDrives();
comboBox_drive.Items.Clear();
for (int i = 0; i < drive.Length ; i++)
{
if (drive[i].IsReady)
comboBox_drive.Items.Add(drive[i]);

}
}
private void but_add_Click(object sender, EventArgs e)
{
if (comboBox_drive.SelectedIndex != -1)
{

DirectoryInfo D_info = new DirectoryInfo(comboBox_drive.Text);
search_drive( D_info.Root);
}
}
private void search_drive( FileSystemInfo fSysInfo)
{

DirectoryInfo dInfo;
dInfo = new DirectoryInfo(fSysInfo.FullName);

FileSystemInfo[] fileSysInfo = dInfo.GetFileSystemInfos();

foreach (FileSystemInfo fsi in fileSysInfo)
{
Application.DoEvents();
//if is file
if((fsi.Attributes & FileAttributes.Archive )== FileAttributes.Archive )
{
//كاري كه ميخواي انجام بده
}
//if is directory
if ((fsi.Attributes & FileAttributes.Directory) ==
FileAttributes.Directory)
{
if ((fsi.Name != "System Volume Information") && (fsi.Name != "$RECYCLE.BIN"))
search_drive( fsi);

}

}
//--------------------

break;



}

}
}