-2

ファイルの所有者情報を取得したいのですが、次の行に問題があります。

const string fileOwner = Delimon.Win32.IO.File.GetAccessControl(fi.Name).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();

具体的には、好きではありませんfi.name。私のエラーは

非静的フィールド、メソッド、またはプロパティ 'Delimon.Win32.IO.File.GetAccessControl(string)' にはオブジェクト参照が必要です

これは、それが置かれているコードの大きなチャンクです。

// check if file exists.  if so dont overwrite...
if(Delimon.Win32.IO.File.Exists(targetPath+fi.Name)) {
    // Console.WriteLine(fileName + " already exists, nothing written");
}
else {
    // Console.WriteLine(fileName + " is new so written to dir");
    string fileOwner=Delimon.Win32.IO.File.GetAccessControl(fi.Name).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
    Delimon.Win32.IO.File.Copy(fileName, destFile, true);

    // convert extension to number
    switch(fileExt) {
        case ".doc":
            fileType=1;
            break;
        case ".xls":
            fileType=2;
            break;
        case ".mdb":
            fileType=3;
            break;
        default:
            fileType=1;
            break;
    }

    // I want tot use fileOwner here in an SQL statement
}

fi.Nameファイル名のみを保持することに注意してください。ファイル名を含む完全な絶対パスfileNameを保持するという変数もあります。これにより、同じ問題が発生します。

4

3 に答える 3

3

メソッドFile.GetAccessControl()は、静的メソッドではなくインスタンス メソッドとして「実装」されます ( MSDNのものとは異なります) 。

タイプのファイルを作成してからDelimon.Win32.IO.File、作成されたインスタンスを使用してメソッドを呼び出してみてください。

Delimon.Win32.IO.File file  = new Delimon.Win32.IO.File(...); // Check constructor
FileSecurity fs = myFile.GetAccessControl();

Delimon.Win32.IO.File.Existsインスタンスメソッドのいずれかである可能性のあるメソッドに関するドキュメントを確認することをお勧めします。

于 2013-04-03T05:04:06.230 に答える
-1

エラーから、GetAccessControl を呼び出すときに fi が null であるため、fi.Name が見つからないようです。デバッガで見てみましょう。

于 2013-04-03T05:03:49.680 に答える
-1

間違った場所にいくつかの回答を入れて申し訳ありません。このサイト(および、わからない場合はc#/ .net)は初めてです。ここで解決策を見つけたと思いますC#でファイル所有者を取得/設定することに基づいて、これが私がどのように機能しているかです:

using System.Security.AccessControl;
using System.Security.Principal;

var fs = System.IO.File.GetAccessControl(fileName);
var sid = fs.GetOwner(typeof(SecurityIdentifier));
Console.WriteLine(sid);
var ntAccount = sid.Translate(typeof(NTAccount));
Console.WriteLine(ntAccount);

そのため、ntAccount は変数である可能性があり、SQL でドキュメント所有者の名前として使用します。いつもここで私を助けてくれてありがとう。このソリューションは機能しているようです。私はここに新しいので、簡単な質問です。これを返信として投稿する必要があり、それを受け入れる必要がありますか?

于 2013-04-03T23:33:33.913 に答える