【问题标题】:C# Wrong Path even with @C# 错误的路径,即使使用 @
【发布时间】:2017-11-06 00:07:27
【问题描述】:

其实我只是想统计一个文件夹中的数据。 不幸的是,无法正确识别路径。

            string tets = @"C:\Users\Tom\Downloads\AppBilder";
            [...]
            StorageFolder folder = await folderPicker.PickSingleFolderAsync();
            [...]
            Ordnerquelle = folder.Path;


int directoryCount = Directory.GetDirectories(tets, " * ", SearchOption.AllDirectories).Length;
int fileCount = Directory.GetFiles(tets, "*", SearchOption.AllDirectories).Length;
count = directoryCount + fileCount;

调试器显示如下:

  • tets: "C:\\Users\\Tom\\Downloads\\AppBilder"
  • Ordnerquelle "C:\\Users\\Tom\\Downloads\\AppBilder"
  • 计数:0

文件夹不为空! 我错过了什么?

Screenshot

【问题讨论】:

  • 请参考msdn.microsoft.com/en-us/library/c1sez4sc(v=vs.110).aspx这个方法只需要传递一个参数。
  • 嗯,fileCount 应该没问题,但 GetDirectories 应该有“*”作为 searchPattern,而不是“*”。
  • 调试器将使用双反斜杠显示转义值。如果单击放大镜图标,您将看到实际值仅包含每个路径分隔符的一个反斜杠。
  • 你真的运行过count = directoryCount + fileCount吗?当调试器程序指示器指向一行代码时,表示调试器尚未运行该行代码。
  • " * " 表示“它以空格开头,有 0 个字符,然后以空格结尾。因此,除非您有符合此条件的目录,否则不会返回任何目录。

标签: c# path uwp escaping directory


【解决方案1】:

我猜我的问题是 UWP 只能访问文件和文件夹,如果 用户使用 FileOpenPicker 或 FolderPicker 手动选择。

在我的示例中,执行了以下几行:

StorageFolder folder = await folderPicker.PickSingleFolderAsync();
string tets = folder.Path;

在那之后,我调用了一个看起来像这样的 Methode:

public static int docount();
{
int directoryCount = Directory.GetDirectories(tets, " * ", SearchOption.AllDirectories).Length;
int fileCount = Directory.GetFiles(tets, "*", SearchOption.AllDirectories).Length;
count = directoryCount + fileCount;
}

!!即使用户选择了路径,它也会作为字符串传递。!!

我的解决方案:

StorageFolder folder = await folderPicker.PickSingleFolderAsync();
int count = await Manager.docount(quelle);

public class Manager
{
public static async Task<int> ErstellltbilderlisteAsync(StorageFolder quelle)
        {
            int idcounter = 0;

            var query = quelle.CreateFileQuery();
            var fileList = await query.GetFilesAsync();
            foreach (StorageFile file in fileList)
            {
                idcounter++;

            }
            return idcounter;
}
}

我不知道这是否是最简单的方法,但我仍在学习。 感谢@Bite 让我走上了正确的道路。

【讨论】:

  • 不客气。你在正确的方向。但是,您可以直接返回 `fileList.Count;` 而不是使用 foreach 循环。
  • 如果您已经解决了您的问题,请mark 接受。
【解决方案2】:

在 GetDirectories 调用中删除 searchPattern 选项中的空格。

删除搜索字符串中多余空格后的代码:

int directoryCount = Directory.GetDirectories(tets, "*", SearchOption.AllDirectories).Length;

【讨论】:

  • 感谢您的回答。但是我的计数器仍然保持在零 =(
【解决方案3】:

我认为您的代码中存在小问题。您不应在搜索模式中提供空格。你使用了" * " 而不是"*"

修改后的代码如下:

int directoryCount = Directory.GetDirectories(tets, "*", SearchOption.AllDirectories).Length;

int fileCount = Directory.GetFiles(tets, "*", SearchOption.AllDirectories).Length;

【讨论】:

  • 我修改了搜索模式。但计数器仍然保持为零。
猜你喜欢
  • 2015-11-24
  • 2021-04-21
  • 1970-01-01
  • 2021-12-03
  • 2015-06-08
  • 1970-01-01
  • 2023-03-19
  • 2020-06-19
  • 1970-01-01
相关资源
最近更新 更多