只需从内部项目文件夹中获取文件

时间:2012-12-11 21:11:34

标签: c# windows-phone-7

  

可能重复:
  how to populate a listbox with files in the project of my windows phone 7 application

我是C#的新手,这让我很烦恼。

我的应用程序从我在解决方案资源管理器中创建的名为Images的文件夹中加载一组图像。我可以看到这些图像,如果我使用硬编码的URI和东西,但我想要做的是将这些图像命名为dinamycally,然后加载它。我看过一些像这样的问题,但无法解决我的问题。我这样想:

DirectoryInfo directoryInfo = new DirectoryInfo(@"/Images");
foreach (FileInfo file in directoryInfo.GetFiles()) {
      photos.Add(new Photo() { FileName = file.FullName, PhotoSource = GetImageSource("Images/" + file.FullName) });
}

directoryInfo始终设为null。解决方案资源管理器中显示的项目层次结构如下:

 Project
     Main.xaml
         Maim.xaml.cs
     Images
         1.jpg
         2.jpg
         ...

在任何帮助下谢谢。

2 个答案:

答案 0 :(得分:1)

来自MSDN

  

对于Windows Phone应用程序,所有I / O操作都受限制   隔离存储并且没有直接访问底层   操作系统文件系统或其他的隔离存储   应用

因此,您无法以您希望的方式访问Images文件夹。

由于无论如何都无法动态地将图像添加到XAP中,因此可用的图像将保持不变。您似乎只需手动添加URI:

BitmapImage myImage = new BitmapImage(new Uri("Images/myImage.png", UriKind.Relative));

如果您为不同的区域设置获得了不同的图像,则可以在资源文件中包含图像名称/路径,然后从那里创建它们。

或者如果您有一组默认图像,然后会有一些用户添加的图像,并且您想迭代所有这些图像,您可以在第一次启动时将您的Images文件夹中的默认值写入IsolatedStorage 。有关使用IsolatedStorage的详细信息,请See here。您可以迭代应用程序IsolatedStorageFile中的目录和文件(请参阅methods available)。

答案 1 :(得分:0)

也许你想用

string path = Path.Combine(Environment.CurrentDirectory, "Images");
foreach (string file in Directory.GetFiles(path) 
{
     photos.Add(new Photo {FileName = file, PhotoSource = GetImageSource(Path.Combine(path, Path.GetFileNameWithoutExtension(file))});
}

返回文件夹内容列表。

Path.Combine将单个字符串组合成一个完整的路径(因此您无需担心Backslahes。

Path Namespace被低估了,我建议你仔细看看它,因为它可以节省你很多时间。