0

我一直在使用 LocalDB.mdf 文件来构建我的应用程序,但现在需要在生产中使用它并创建一个可安装的应用程序。

经过研究,似乎存储此类文件的最佳位置是在/Appdata/Local/文件夹中。

如果它不存在或已被删除,我打算在那里创建一个新的 LocalDB.mdf 文件。

我的应用程序资源中有一个预制的 LocalDB.mdf 文件,我想/Appdata/Local/在第一次运行时将其复制到此文件夹中,但我看到 Access is denied 错误。

我可以为该文件夹创建一个空白文件。

这是代码:

string appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        string dvAppDataFolder = appDataFolder + @"\MyApp";
        AppDomain.CurrentDomain.SetData("DataDirectory", dvAppDataFolder);

        if (!Directory.Exists(dvAppDataFolder))
            Directory.CreateDirectory(dvAppDataFolder);

        if (!File.Exists(dvAppDataFolder + "LocalDB.mdf"))
        {
            File.WriteAllBytes(dvAppDataFolder, LokiServer.Properties.Resources.newDB);
        }

另外,我是否以正确的方式进行此操作?

4

1 回答 1

2

这条线

if (!File.Exists(dvAppDataFolder + "LocalDB.mdf")) 

可能是错的。缺少反斜杠,最好使用Path.Combine而不是字符串连接。

最后,您要写入文件而不是文件夹

 string fileName = Path.Combine(dvAppDataFolder,"LocalDB.mdf");
 if (!File.Exists(fileName))
 {
        File.WriteAllBytes(fileName, LokiServer.Properties.Resources.newDB);
 }

你做对了吗?这取决于。如果您的应用程序数据应该为目标机器的每个用户分开,那么您是对的,但是如果您希望您的数据库可供该机器的所有用户使用,请使用

string appDataFolder = Environment.GetFolderPath
                      (Environment.SpecialFolder.CommonApplicationData);
于 2015-06-30T10:22:14.527 回答