Directory.GetFiles或DirectoryInfo.GetFiles返回空列表

时间:2015-07-13 09:49:32

标签: c#

我在ASP.NET应用程序执行期间遇到了一些奇怪的行为。 如果我将workingFolder(请参阅下面的代码)设置为System.IO.Path.GetTempPath或任何其他公用文件夹(当前案例),则无关紧要。

我收到一个ZIP文件,解压该文件(使用SharpZipLib)并尝试消化该文件夹中的文件,但System.IO GetFiles返回一个空列表。 我尝试使用DirectoryInfo.GetFilesDirectory.GetFiles:两个都是空列表。 如果我在Directory.Delete上断点并查看文件夹我可以看到文件,它们没有被锁定,我可以对文件做任何事情 - 即使我在开头设置了“从游标运行”点foreach没有运气 - GetFiles仍会返回一个空列表(尽管我可以查看资源管理器中的文件)。

    private const string EXTENSION_LOG_FILE = ".txt";
    private const string VALID_EXTENSION_MASK = "*." + EXTENSION_LOG_FILE;

                var zipFolder = unpackZip(filePath, workingFolder);
            foreach (var zipFileInfo in new DirectoryInfo(zipFolder).GetFiles(VALID_EXTENSION_MASK, SearchOption.TopDirectoryOnly))
            {
                // never get's here
                value.AddRange(getLogItems(zipFileInfo.FullName));
                File.Delete(zipFileInfo.FullName);
            }
            // this fails: folder is not empty
            Directory.Delete(zipFolder);

和unpackZip方法:

private static string unpackZip(string zipFile, string workingFolder)
    {
        // doesn't matter what name I use, GUID or no GUID the GetFiles still returns an empty lists
        var tempFolder = Path.Combine(workingFolder, Guid.NewGuid().ToString()); 
        Directory.CreateDirectory(tempFolder);

        using (var unzipStream = new ZipInputStream(File.OpenRead(zipFile)))
        {
            ZipEntry entry;
            while ((entry = unzipStream.GetNextEntry()) != null)
            {
                var fileName = Path.GetFileName(entry.Name);
                if (fileName == string.Empty) continue;

                using (var streamWriter = File.Create(Path.Combine(tempFolder, Path.GetFileName(entry.Name))))
                {
                    var size = 2048;
                    var data = new byte[2048];
                    while (size > 0)
                    {
                        size = unzipStream.Read(data, 0, data.Length);
                        streamWriter.Write(data, 0, size);
                    }
                }
            }
        }
        return tempFolder;
    }

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我猜到的问题 private const string VALID_EXTENSION_MASK = "*." + EXTENSION_LOG_FILE;  因*..txt

而重新EXTENSION_LOG_FILE = ".txt"