1

Windows モバイル アプリにローカル データベース ファイル ( database.sdf) があります。ユーザーがデバイスに CAB ファイルをインストールするときに作成されるファイル。インストールは正常に機能しますが、Query Analyzer で SDF を開こうとすると、またはアプリがデータベースにアクセスしようとすると、メッセージが表示されます。

「データベース ファイルへのアクセスは許可されていません」(25039)

Windows エクスプローラー (デバイスがドッキングされている) を使用してアクセス許可を確認したところ、ファイルは読み取り専用とマークされています。読み取り専用チェックボックスを削除すると、すべて正常に機能し、レコードを開いて編集し、データベースに追加できます。

デフォルトでファイルを読み取り専用にしないようにするにはどうすればよいですか?

4

3 に答える 3

2

アプリケーションの起動時に、プログラムで属性を確認できます。C#/。netcfでは、次のようになります。

if (File.GetAttributes(path) & FileAttributes.ReadOnly == FileAttributes.ReadOnly)
    File.SetAttributes(path, File.GetAttributes(path) & ~FileAttributes.ReadOnly);
于 2012-06-19T19:34:19.643 に答える
2

yms が提供する回答に加えて、そもそもファイルがレディオンリーとして作成されている理由を突き止めようとします。

インストール プロセスに追加したカスタム インストーラー dll を介して作成されますか? それとも、cabwiz または VS のインストーラー プロジェクトを介して .CAB ファイルにパッケージ化されていますか?

前者の場合は、そのインストーラー ライブラリのソース コードを確認してください。後者の場合は、ソース ファイルを確認してください。Visual Studio プロジェクトに SDF を含め、プロジェクトを何らかの種類のソース管理にチェックインした場合、ソース リポジトリにチェックインされている間は、.CAB にパッケージ化されたときにディスク上で読み取り専用になる可能性があります。

于 2012-06-21T12:47:55.300 に答える
1

これが古いことは知っていますが、Andrew が実際に .netcf を使用している場合、File.GetAttributes はありません。代わりに彼は使用する必要があります

        FileInfo info = new FileInfo(pathToFile)
        if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
            info.Attributes &=~ FileAttributes.ReadOnly;
于 2013-05-06T12:19:10.953 に答える