0

如何在 C# WindowsPhone8 SDK 中添加文件到安装目录?

我正在尝试读取文本文件,该文件位于我项目的 Content 目录中。问题是,没有文本导入器。但这没关系。真正的问题是,我不知道如何将文件添加到安装目录。内容添加文件不起作用。

我正在尝试将 Lua 脚本保存在文本文件中,然后执行它。我正在使用“Aluminium Lua”库。

if (runAtStartup == false)
{
    runAtStartup = true;

    try
    {
        prs = new AluminumLua.LuaParser(ctx, "main.lua");
        prs.Parse();
    }

    catch (Exception e)
    {
        System.Diagnostics.Debug.WriteLine(e.Message);
    }
}

这段代码向我抛出了这个异常:

mscorlib.ni.dll 中出现“System.IO.FileNotFoundException”类型的第一次机会异常找不到文件“C:\Data\Programs{9B9E8659-C441-4B00-A131-3C540F5CEE4F}\Install\main.lua”。

如何将文件添加到安装目录?

4

2 回答 2

2

将您的文件作为内容添加到您的项目中。您可以通过以下方式访问您的文件:

string folder = Package.Current.InstalledLocation.Path;
string path = string.Format(@"{0}\data\myData.bin", folder);
StorageFile storageFile = await StorageFile.GetFileFromPathAsync(path);
Stream stream = await storageFile.OpenStreamForReadAsync();

或类似的东西:

string folder = Package.Current.InstalledLocation.Path;
string currentMovieVideoPath = string.Format(@"{0}\media\video\Movie.mp4", folder);
this.MovieVideo.Source = new Uri(currentMovieVideoPath, UriKind.Absolute);
于 2013-04-05T12:08:50.033 回答
1

通过将文件作为内容添加到我的项目树中的特定文件夹(例如/Data),我已经在我的一些手机应用程序中解决了这个问题。然后,当应用程序第一次运行时,我将内容文件复制到隔离存储中,然后我的应用程序可以根据需要读取它。这是一个简单的例子:

// Check for data files and copy them to isolated storage if they're not there...
// See below for methods found in simple IsolatedStorageHelper class
var isoHelper = new IsolatedStorageHelper();

if (!isoHelper.FileExists("MyDataFile.xml"))
{
    isoHelper.SaveFilesToIsoStore(new[] { "Data\\MyDataFile.xml" }, null);
}

/* IsolatedStorageHelper Methods */

/// <summary>
/// Copies the content files from the application package into Isolated Storage.
/// This is done only once - when the application runs for the first time.
/// </summary>
public void SaveFilesToIsoStore(string[] files)
{
    SaveFilesToIsoStore(files, null);
}

/// <summary>
/// Copies the content files from the application package into Isolated Storage.
/// This is done only once - when the application runs for the first time.
/// </summary>
public void SaveFilesToIsoStore(string[] files, string basePath)
{
    var isoStore = IsolatedStorageFile.GetUserStoreForApplication();

    foreach (var path in files)
    {
        var fileName = Path.GetFileName(path);

        if (basePath != null)
        {
            fileName = Path.Combine(basePath, fileName);
        }

        // Delete the file if it's already there
        if (isoStore.FileExists(fileName))
        {
            isoStore.DeleteFile(fileName);
        }

        var resourceStream = Application.GetResourceStream(new Uri(path, UriKind.Relative));

        using (var reader = new BinaryReader(resourceStream.Stream))
        {
            var data = reader.ReadBytes((int)resourceStream.Stream.Length);

            SaveToIsoStore(fileName, data);
        }
    }
}

这种方法的缺点是您实际上将数据文件存储了两次。好的一面是,一旦它们处于隔离存储中,它们就很容易使用。尽管如此,我不知道 Lua API 支持什么——即我不知道它们是否可以从隔离存储中加载。如果没有,您始终可以打开文件流并可能以这种方式加载 Lua 脚本文件。

于 2013-03-29T02:01:42.050 回答