0

次の関数を使用して、Windows の 1 つのユーザー アカウントにいくつかのログを含むテキスト ファイルを作成しました。

WORD wBOM = 0xFEFF;

    HANDLE hFile = ::CreateFileW(filePath, GENERIC_WRITE, 0, NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL, NULL);

            ::WriteFile(hFile, &wBOM, sizeof(WORD), &NumberOfBytesWritten, NULL);
            ::CloseHandle(hFile); 

現在、このファイルを他のユーザー アカウントからプログラムで読み取ると、ファイルを開いてその内容を読み取ることができません。

以下の関数を使用して、他のユーザー アカウントから読み取ります。

CFile file;
        CFileException *exp = NULL;
        if(!file.Open( logAppExecPath,CFile::modeReadWrite | CFile::shareDenyNone,exp))
        {

        if(exp != NULL)
        {
            TCHAR ErrorMsg[MAX_PATH];
            exp->GetErrorMessage(ErrorMsg,MAX_PATH);
            AfxMessageBox(L"XML Creation while AppExecLogs : "+ CString(ErrorMsg));
            exp->Delete();

        }
        }

ただし、同じユーザー アカウントから読み取るときは常に、上記の機能は完全に機能し、ファイルを開いて適切に読み取ります。

どちらのユーザー アカウントも管理者アカウントです。

結論として、あるユーザーアカウントでプログラムでファイルを書き込み、他のユーザーアカウントから読み取ると、「ファイルが存在しない」という例外が発生します..しかし、実際にはファイルが存在し、クリックして手動でそのファイルを開くことができます。

4

1 に答える 1

2

デフォルトでは、ユーザーのプロファイルにはそのユーザーのみがアクセスできます。さらに、Windows には、他のユーザーのプロファイルにアクセスするための標準的な方法がありません。

最適なオプションは、C:\ProgramData\(必要に応じてアクセス許可を設定して) または共通ドキュメント フォルダーのいずれかで、共通/共有の場所を使用することです。どこにあるかは、ファイルの内容によって異なります。

于 2012-06-28T15:30:58.570 に答える