4

ここに画像の説明を入力してください

サーバークライアントアプリケーションがあります。ファイルマネージャーです
。システムフォルダーなどのアクセス制御が必要なフォルダー内に入ると、読み取り専用になりますが、新しいフォルダーを移動/削除または作成する必要があります。どうすればよいですか。それを行う許可を得ますか?

サーバー側で新しいフォルダを作成する方法は次のとおりです

public void NewFolder(string path)
    {
        try
        {
            string name = @"\New Folder";
            string current = name;
            int i = 0;
            while (Directory.Exists(path + current))
            {
                i++;
                current = String.Format("{0} {1}", name, i);
            }
            Directory.CreateDirectory(path + current);
            Explore(path); //this line is to refresh the items in the client side after creating the new folder
        }
        catch (Exception e)
        {
            sendInfo(e.Message, "error");
        }
    }
4

7 に答える 7

4

ディレクトリの読み取り専用属性を削除する場合は、次を使用してください:http ://social.msdn.microsoft.com/Forums/en/vblanguage/thread/cb75ea00-f9c1-41e5-ac8e-296c302827a4

システムフォルダにアクセスしたい場合は、ローカル管理者としてプログラムを実行できます。

于 2012-02-25T13:19:14.620 に答える
4

多くの場合、ドライブには、管理者権限を持つユーザーでもアクセスできないディレクトリがあります。「HDDRecovery」のような名前のディレクトリは、このように厄介になる可能性が非常に高くなります。確かに、ユーザーがディスク障害から回復するのに役立つ機密データが含まれています。このカテゴリに該当する別のディレクトリは「c:\ systemvolume information」で、復元ポイントデータが含まれています。

管理者は、このようにフォルダの権限を変更できます。しかしもちろん、それは本当の問題を解決するものでも、賢明なことでもありません。ユーザーはできませんし、すべきではありません。このような権限の問題を処理するコードを作成してください。IOExeptionをキャッチするだけです。HiddenまたはSystem属性が設定されているディレクトリを表示しないようにして、ユーザーをトラブルから守ります。それらは「私を台無しにしないでください」という属性です。

于 2012-02-25T14:42:21.963 に答える
4

私はこのコードで同様の問題(asp.net MVC vs2017)を抱えていました:

Directory.CreateDirectory("~/temp");

これが私の解決策です:

// Create path on your web server
System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("~/temp"));
于 2018-07-24T12:03:02.927 に答える
3

私もこれと同様の問題に遭遇しましたが、Windowsエクスプローラーを手動でナビゲートしてディレクトリを作成することができました。

ただし、ラップトップのVSで実行され、ローカルIISを介してホストされ、VSの組み込みIIS取引ではない、私のWebアプリが、アクセス拒否の問題を引き起こしていました。

そのため、コードでエラーが発生したときに、ドリルダウンしてSystem.Environmentオブジェクトからさらにデータを収集し、ユーザーを見つけました。これはもちろん、IISでアプリが実行されていたアプリプールでした。

そこで、IISを開き、問題のアプリプールの詳細設定を開き、ネットワークサービスで実行するようにIDを変更しました。[OK]をクリックします。「cmd->iisreset」をお勧めします。アプリをもう一度試して、成功してください!!!!

于 2014-02-03T19:02:17.963 に答える
1

ディレクトリを作成するときに同じ問題が発生しました。以下に示すように、DirectorySecurityを使用しました。

DirectorySecurity securityRules = new DirectorySecurity();
securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\AdminAccount1", FileSystemRights.Read, AccessControlType.Allow));
securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\YourAppAllowedGroup", FileSystemRights.FullControl, AccessControlType.Allow));

DirectoryInfo di = Directory.CreateDirectory(path + current, securityRules);

また、 Hans Passantの回答で説明されているように、セキュリティについても注意してください。

詳細については、MSDNを参照してください。

したがって、完全なコード:

public void NewFolder(string path)
{
    try
    {
        string name = @"\New Folder";
        string current = name;
        int i = 0;
        while (Directory.Exists(path + current))
        {
            i++;
            current = String.Format("{0} {1}", name, i);
        }
        //Directory.CreateDirectory(path + current);
        DirectorySecurity securityRules = new DirectorySecurity();
        securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\AdminAccount1", FileSystemRights.Read, AccessControlType.Allow));
        securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\YourAppAllowedGroup", FileSystemRights.FullControl, AccessControlType.Allow));

        DirectoryInfo di = Directory.CreateDirectory(path + current, securityRules);

        Explore(path); //this line is to refresh the items in the client side after creating the new folder
    }
    catch (Exception e)
    {
        sendInfo(e.Message, "error");
    }
}
于 2015-02-09T00:06:54.243 に答える
0

私の疑惑は、アプリケーションをクライアント/サーバーモードで実行している場合、サーバー部分を管理者として実行する必要があることです。また、読み取り専用フラグやシステムフラグを削除して、必要な処理を実行できるようにする必要があります。

そうは言っても、私は@HansPassantに同意します-あなたがやろうとしていることは賢明ではないようです。

于 2012-02-25T15:54:21.490 に答える
0

解決済み: 以下のコードと設定を使用してリモートサーバー上に作成されたディレクトリ。

フォルダを共有し、フォルダの事前設定でも完全なアクセス権を付与します。

DirectoryInfo di = Directory.CreateDirectory(@"\\191.168.01.01\Test\Test1");

Testは、新しいTest1フォルダー(ディレクトリ)を作成する宛先フォルダーです。

于 2017-03-15T06:37:19.633 に答える