0

以下に示すようにCreateFileを使用しており、isInvalid = trueを取得し続けていますが、「Marshal.GetLastWin32Error」から返されるエラーコードは、アクセスしようとしているパスに応じて変化しています。

パスとそれに対応するエラーコードは次のとおりです。

  1. @lpFileName = "c:\"-> 3
  2. @lpFileName = "\\ 127.0.0.1 \ share \"-> 123
  3. @lpFileName = "c:\ share \"-> 5

明らかに「c:\」は存在します。私が知る限り、「\\ 127.0.0.1 \ share \」は有効なUNCであり、NTFSと共有の両方のターゲットコンピューター上のすべてのユーザーに可能な限りの権利を与えました。それらのどれも意味がありません。

私のシステムはServer2008R2ヘルプをお願いします。

CreateFile:

[DllImport("kernel32.dll", SetLastError = true)]
    static extern SafeFileHandle CreateFile(
        LPCTSTR lpFileName,
        DWORD dwDesiredAccess,
        DWORD dwShareMode,
        LPSECURITY_ATTRIBUTES lpSecurityAttributes,
        DWORD dwCreationDisposition,
        DWORD dwFlagsAndAttributes,
        HANDLE hTemplateFile
        );

以下のフラグを使用して:

DWORD dwIoControlCode,
        LPCTSTR lpFileName,
        DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE,
        DWORD dwShareMode = FILE_SHARE_WRITE|FILE_SHARE_READ,
        LPSECURITY_ATTRIBUTES lpSecurityAttributes = default(LPSECURITY_ATTRIBUTES),
        DWORD dwCreationDisposition = OPEN_EXISTING,
        DWORD dwFlagsAndAttributes = 0,
        HANDLE hTemplateFile = default(IntPtr)
        )

およびフラグ値:

 public const DWORD
        GENERIC_READ = 0x80000000,
        GENERIC_WRITE = 0x40000000,
        FILE_SHARE_WRITE = 0x2,
        FILE_SHARE_READ = 0x1,
        OPEN_EXISTING = 0x3;
4

2 に答える 2

1

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx

CreateFile関数(Windows)

ディレクトリ

CreateFileを使用してディレクトリを開くには、dwFlagsAndAttributesの一部としてFILE_FLAG_BACKUP_SEMANTICSフラグを指定します。

于 2013-03-18T13:46:32.013 に答える
0

ここでアンマネージコードを使用しているのはなぜですか?標準の管理オプションを試してください。

using(var fs = new FileStream(...)){

}
于 2013-03-18T07:02:01.527 に答える