2013-05-25 15 views
5

私はいくつかのパス繰り返し処理を行う場合、私はこの行を実行しているVS 2010「Documents and Settings」フォルダにアクセスするにはどうすればよいですか?

でのC#.NET 4を使用しています:

files = Directory.GetFiles(path, searchPattern); 

パスはドキュメントと設定されたときに、私は例外を取得フォルダ。どうすればそれにアクセスできますか?そして、いいえ、私はtryとcatchでフォルダをスキップしたくありません。私は何とかそれにアクセスできるようにしたい。

編集:フォローアップの質問があります。私があなたに言ったように、私は道を繰り返しています。 Environment.GetFolderPathを使用する方法がありますが、現在チェックしているパスに従って正しいspeicalフォルダを識別していますか?

答えて

4

あなたはMyDocumentsフォルダへのアクセス権を取得するには、この

var mydocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 

のように使用する必要があります。

+0

私の質問を編集して、それに対する答えを知っている場合は、フォローアップの質問を追加しました。 –

+0

あなたはこのEnvironment.GetFolderPath(...)とあなたが持っているパスを非常に良く見分けることができます。もし一致すれば、続けることができます。そうでなければ、ループ構造で 'Continue'を呼び出すことができます。 – Saravanan

+0

私は何かを自動的に意味しました。 (擬似コード)のようなもの: SpeicalFolderフォルダ= Environment.GetSpeicalFolderByFullPath(パス); –

4

システムEnvironment.SpecialFolder

から特別なフォルダは、共通の情報が含まれている、そのようなプログラムファイル、 プログラム、システム、またはスタートアップフォルダなど、です。 特別なフォルダは、システムによってデフォルトで、またはWindowsのバージョンをインストールするときには ユーザによって明示的に設定されます。

GetFolderPathメソッドは、この 列挙型に関連付けられた場所を返します。これらのフォルダの場所は、異なるオペレーティングシステム上で異なる値 を持つことができます。ユーザーは の場所の一部を変更でき、場所はローカライズされています。

がEnvironment.GetFolderPathを使用する方法はありますが、何とか 正しいspeicalフォルダをidetifying C:\Users\Soner\Documentsとして

ちょうど私のコンピュータでは

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
files = Directory.GetFiles(path, searchPattern); 

を使用し、それがパスに応じて返します私は現在 チェックですか?

SpecialFolderはenum型なので、ループ内で値を反復処理できます。ここでそれはどのように見えるのですか?

public enum SpecialFolder 
{ 
    AdminTools = 0x30, 
    ApplicationData = 0x1a, 
    CDBurning = 0x3b, 
    CommonAdminTools = 0x2f, 
    CommonApplicationData = 0x23, 
    CommonDesktopDirectory = 0x19, 
    CommonDocuments = 0x2e, 
    CommonMusic = 0x35, 
    CommonOemLinks = 0x3a, 
    CommonPictures = 0x36, 
    CommonProgramFiles = 0x2b, 
    CommonProgramFilesX86 = 0x2c, 
    CommonPrograms = 0x17, 
    CommonStartMenu = 0x16, 
    CommonStartup = 0x18, 
    CommonTemplates = 0x2d, 
    CommonVideos = 0x37, 
    Cookies = 0x21, 
    Desktop = 0, 
    DesktopDirectory = 0x10, 
    Favorites = 6, 
    Fonts = 20, 
    History = 0x22, 
    InternetCache = 0x20, 
    LocalApplicationData = 0x1c, 
    LocalizedResources = 0x39, 
    MyComputer = 0x11, 
    MyDocuments = 5, 
    MyMusic = 13, 
    MyPictures = 0x27, 
    MyVideos = 14, 
    NetworkShortcuts = 0x13, 
    Personal = 5, 
    PrinterShortcuts = 0x1b, 
    ProgramFiles = 0x26, 
    ProgramFilesX86 = 0x2a, 
    Programs = 2, 
    Recent = 8, 
    Resources = 0x38, 
    SendTo = 9, 
    StartMenu = 11, 
    Startup = 7, 
    System = 0x25, 
    SystemX86 = 0x29, 
    Templates = 0x15, 
    UserProfile = 40, 
    Windows = 0x24 
} 
+0

私の質問を編集して、その答えを知っている場合は、フォローアップの質問を追加してください。 –

+0

@ YonatanNir更新されました。 –

+0

自動的に行う方法はありますか?何かのような(擬似コード):SpeicalFolder folder = Environment.GetSpeicalFolderByFullPath(path); また、わからないことがあります。 throwされた例外と例外はC:\\ Documents and Settingsで、環境によって私に与えられたパスはC:\\ Users \\ Yonatan \\ Documentsです。実行時にパスを比較して、例外をスローしたパスが実際に別の特別なパスになっていることを確認するにはどうすればよいですか? if(path == "C:\ Documents and Settings")は、異なるコンピュータ間で変更される可能性があるので、私はちょうどできません。 –

0

管理者としてのみ実行できるようにプログラムを設定できます。 Visual Studioで

プロジェクトを右クリック - >プロパティ - >セキュリティ - あなたはそれをクリックした後> ClickOnceのセキュリティに

を有効にし、ファイルは、プロジェクトのプロパティの下に作成されますが、アプリと呼ばれるフォルダ。

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

へ:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

このプログラムは、管理者が必要になりますこれが作成されると、あなたが有効にClickOnceのセキュリティ設定オプション

を開き、そのファイルのチェックを外すと、この行を変更することができますマニフェストあなたがそのフォルダにアクセスできることを保証します。

+0

それはうまくいかなかった –

関連する問題