在ASP.NET应用程序执行过程中,我发现了一些奇怪的行为。如果我将workingFolder (参见下面的代码)设置为System.IO.Path.GetTempPath
或任何其他公用文件夹(当前情况),这并不重要。
我收到一个ZIP文件,解压缩该文件(使用SharpZipLib)并尝试消化该文件夹中的文件,但是System.IO GetFiles
返回一个空列表。我尝试使用DirectoryInfo.GetFiles
和Directory.GetFiles
:都是空列表。如果我在Directory.Delete
上断点并查看我可以看到的文件夹,它们就不会被锁定,而且我可以对文件做任何事情--即使我在foreach
no开头设置了"run游标“点-- 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;
}
有什么建议吗?
发布于 2015-07-13 01:54:20
我在private const string VALID_EXTENSION_MASK = "*." + EXTENSION_LOG_FILE;
中猜到的问题,因为EXTENSION_LOG_FILE = ".txt"
反悔了*..txt
https://stackoverflow.com/questions/31380184
复制