0

当我点击 ContextMenu 的 MenuItem 时,我试图删除一个目录及其所有内容。但是我似乎遇到了问题,因为文件/目录没有被删除。

但是我没有遇到任何错误,它似乎不起作用。

到目前为止,这是我的代码:

private void gridSessionDelete_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    var item = (((sender as MenuItem).Parent as ContextMenu).Owner as Grid);
    var title = (TextBlock)item.FindName("Title");
    string directory = title.Text;

    var appStorage = IsolatedStorageFile.GetUserStoreForApplication();

    string[] fileList = appStorage.GetFileNames(directory + "\\*");

    foreach (string file in fileList) 
    { 
        appStorage.DeleteFile(directory + "\\" + file); 
    }

    appStorage.DeleteDirectory(directory);

    bindList();
}

有人对我做错了什么有任何帮助吗?

感谢所有帮助!

4

2 回答 2

0

嗯,我可以看到几个地方,可能是错误的地方。

首先,这一行:

var item = (((sender as MenuItem).Parent as ContextMenu).Owner as Grid);

如您所知,当您使用as关键字强制转换类型时,结果可能为 null 并且不会引发异常。

其次,IMO 最重要的是:

这一行:

string[] fileList = appStorage.GetFileNames(directory + "\\*");

那什么也找不到。您应该在搜索请求中使用“ . ”(星点星号)而不是“*”(星号)。

此外,当您使用 IsolatedStorage 时,请使用using关键字,例如:

 using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
              // your code
            }
于 2013-07-24T05:39:44.413 回答
0

代码真的执行了吗?断点会被击中吗?如果是这样,这是我用来删除目录中所有文件的代码。它对我有用。我看到的主要区别在于 DeleteFile 方法。

var storage = IsolatedStorageFile.GetUserStoreForApplication();
if (storage.DirectoryExists(directoryName))
{
    foreach (var oldFile in storage.GetFileNames(string.Concat(directoryName, "\\*")))
    {
        storage.DeleteFile(Path.Combine(directoryName, oldFile));
    }
}
于 2013-07-24T15:48:40.257 回答