7

VS 2010 で C# .NET 4 を使用しています。

いくつかのパスを反復するとき、私はこの行を実行しています:

files = Directory.GetFiles(path, searchPattern);

パスがドキュメントと設定フォルダーの場合、例外が発生します。どうすればアクセスできますか? いいえ、トライアンドキャッチでフォルダーをスキップしたくありません。なんとかアクセスできるようにしたいです。

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

4

3 に答える 3

10

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

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

フォルダへのアクセスを取得しMyDocumentsます。

于 2013-05-25T18:14:01.657 に答える
5

からEnvironment.SpecialFolder

システム スペシャル フォルダは、Program Files、Programs、System、Startup などのフォルダで、共通の情報が含まれています。特別なフォルダーは、Windows のバージョンをインストールするときに、システムによって既定で設定されるか、ユーザーによって明示的に設定されます。

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

使うだけ

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

私のコンピューターでは、次のように返されますC:\Users\Soner\Documents

Environment.GetFolderPath を使用する方法はありますが、現在チェックしているパスに従って正しい特別なフォルダーを特定する方法はありますか?

は列挙型であるためSpecialFolder、ループ内で値を反復できます。これがどのように見えるかです。

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
}
于 2013-05-25T18:17:27.077 に答える
0

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

Visual Studio の場合:

プロジェクトを右クリック -> プロパティ -> セキュリティ -> ClickOnce セキュリティを有効にする

クリックすると、プロジェクトのプロパティ フォルダーの下に app.manifest というファイルが作成されます。これが作成されると、[ClickOnce セキュリティ設定を有効にする] オプションのチェックを外すことができます。

そのファイルを開き、次の行を変更します。

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

に:

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

これにより、プログラムに管理者権限が必要になり、そのフォルダーへのアクセスが保証されます。

于 2013-05-25T19:24:09.807 に答える