我在ASP.NET应用程序执行期间遇到了一些奇怪的行为。
如果我将workingFolder(请参阅下面的代码)设置为System.IO.Path.GetTempPath
或任何其他公用文件夹(当前案例),则无关紧要。
我收到一个ZIP文件,解压该文件(使用SharpZipLib)并尝试消化该文件夹中的文件,但System.IO GetFiles
返回一个空列表。
我尝试使用DirectoryInfo.GetFiles
和Directory.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;
}
有什么建议吗?
答案 0 :(得分:0)
我猜到的问题
private const string VALID_EXTENSION_MASK = "*." + EXTENSION_LOG_FILE;
因*..txt
EXTENSION_LOG_FILE = ".txt"