2016-09-12 8 views
-2

OKみんな、私はC#認証が必要なファイルを避けるにはどうすればよいですか?

(それは(6つのフォルダとさらにいくつかのファイル)小さい紀元前だけで、テストのためにそれを作った)私はそのA鉱山の場合には、特定のドライブに行かなければならない次の問題

を得ましたそのドライブ上

、私はすべてのフォルダとサブフォルダとファイルのリストを取得し、XMLファイルにそれを記述する必要があります....

今私はほぼ完了しています...

私が持っていますDirectoryInfo内のすべてのフォルダとファイル

ファイルをforeachループで調べると、OSからの許可が必要な魔法使いになって例外がスローされ、プログラムが失敗します...

私はその例外を処理する必要がありますそのファイルをスキップして、次のページに進みます...

私を助けますか?

ここでは、コードです:

private static XElement GetDirectoryXml(DirectoryInfo dir) 
    { 
     var info = new XElement("dir", new XAttribute("name", dir.Name)); 


     foreach (var file in dir.GetFiles()) //here is the exception 
     { 
      info.Add(new XElement("file", new XAttribute("name", file.Name))); 
     } 

     foreach (var subDir in dir.GetDirectories()) 
     { 
      info.Add(GetDirectoryXml(subDir)); 
     } 

     return info; 
    } 

例外はこれです:パスへのアクセス「:型「System.UnauthorizedAccessException」の未処理の例外がmscorlib.dllで

発生しました追加情報\ Config.Msi 'は拒否されました。

は、私は、try catchブロック

foreach (var file in dir.GetFiles()) 
     { 
      try 
      { 
       info.Add(new XElement("file", new XAttribute("name", file.Name))); 
      } 

      catch (Exception e) 
      { 
       continue; 
      } 
      finally 
      { } 
     } 

を試してみましたが、それがところでここ

iはMSのVisual Studio 2013

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Security; 
using System.Security.Permissions; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
class Program 
{ 

    static void Main(string[] args) 
    { 
     var doc = new XDocument(); 
     var driver = new DriveInfo(@"A:\"); 
     foreach (var dir in driver.RootDirectory.GetDirectories()) 
     { 
      doc = new XDocument(GetDirectoryXml(dir)); 

     } 
     Console.WriteLine(doc.ToString()); 
     Console.Read(); 
    } 

    private static XElement GetDirectoryXml(DirectoryInfo dir) 
    { 
     var info = new XElement("dir", new XAttribute("name", dir.Name)); 


     foreach (var file in dir.GetFiles()) 
     { 
      try 
      { 
       info.Add(new XElement("file", new XAttribute("name", 
        file.Name))); 
      } 

      catch (Exception e) 
      { 
       continue; 
      } 
      finally 
      { } 
     } 
     foreach (var subDir in dir.GetDirectories()) 
     { 
      info.Add(GetDirectoryXml(subDir)); 
     } 

     return info; 
    } 

    } 
} 
+1

ので....あなたが適切な言葉は「例外を扱う」知っているようです。 C#で例外を処理する方法を調べるためにWeb検索を試しましたか? – mason

+0

私はこれを試しました:try { foreach(dir.GetFiles()内のvarファイル { info.Add(new XElement( "file"、new XAttribute( "name"、file.Name)))); } } キャッチ(例外e) { } ついに {}しかし、それはあなたはそれがなかった場合、あなたはそれを望んでいたかどうか何も言わなかった、あなたが何かをしようとしたと述べた – bro1

+0

仕事didntの。 – mason

答えて

2

問題usinf午前、コード全体で同じ結果でしたループ内ではなく、dir.GetDirectoriesまたはdir.GetFilesへの呼び出しです。あなたはそれらを包含するtry/catchが必要になります。

private static XElement GetDirectoryXml(DirectoryInfo dir) 
{ 
    var info = new XElement("dir", new XAttribute("name", dir.Name)); 

    try 
    { 
     foreach (var file in dir.GetFiles()) //here is the exception 
     { 
      info.Add(new XElement("file", new XAttribute("name", file.Name))); 
     } 

     foreach (var subDir in dir.GetDirectories()) 
     { 
      info.Add(GetDirectoryXml(subDir)); 
     } 
    } 
    catch (UnauthorizedAccessException) 
    { 
    } 
    return info; 
} 
+0

yyyy、私はそれをスキップしたい、それを行う方法? – bro1

+0

@ bro1:私の更新を参照してください。私はそれがあなたが求めていることをするだろうと思う。 –

+0

男、それは今動作します! – bro1

関連する問題