我一直在读的静态方法文件类最好是用在像检查,看看是否存在对文件执行小一些任务,我们应该使用的实例FileInfo的,如果我们要进行很多类对特定文件的操作.
我理解这一点,可以盲目地使用它,但我想知道为什么会有区别?它们的工作方式是什么使它们适合不同的情况?让这2个不同的类看起来以不同的方式做同样的事情有什么意义呢?
如果有人能够至少回答其中一个问题,将会很有帮助.
在我的应用程序中,我构建了一个用户可以创建图片库的系统.在磁盘上以category_name/gallery_name/{pictures}格式保存在文件夹中的照片.每张上传的照片都存储在上面给出的相关目录结构下.
当尝试删除类别,以及从数据库中删除时,我也想删除系统中的相关文件夹.当我第一次收到错误消息"目录不为空"时,我搜索并找到了这个解决方案:
public static void DeleteDirectory(string target_dir)
{
string[] files = Directory.GetFiles(target_dir);
string[] dirs = Directory.GetDirectories(target_dir);
foreach (string file in files)
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
foreach (string dir in dirs)
{
DeleteDirectory(dir);
}
Directory.Delete(target_dir, false);
}
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,"gallery_name"文件夹中的照片被删除就好了,然后gallery_name文件夹本身被删除了.所以我们现在留下一个空的category_name文件夹.然后调用上面子例程(Directory.Delete(target_dir, false);
)中的最后一部分代码来删除category_name文件夹.错误再次引发..
有谁知道解决这个问题?
Directory.Delete(target_dir, true);
没用,这就是我尝试替代方案的原因.我得到的异常消息是:
System.IO.IOException was unhandled by user code
HResult=-2147024751
Message=The directory is not empty.
Source=mscorlib
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive, Boolean throwOnTopLevelDirectoryNotFound)
at System.IO.Directory.Delete(String …
Run Code Online (Sandbox Code Playgroud) 我试图从一个位置删除大量文件(大的意思是超过100000),从而从网页启动操作.显然我可以使用
string[] files = System.IO.Directory.GetFiles("path with files to delete");
foreach (var file in files) {
IO.File.Delete(file);
}
Run Code Online (Sandbox Code Playgroud)
Directory.GetFiles http://msdn.microsoft.com/en-us/library/wz42302f.aspx
此方法已经发布了几次: 如何删除目录中的所有文件和文件夹? 并 从目录中删除的文件,如果文件名包含某个词
但是这个方法的问题在于,如果你说了十万个文件就会成为一个性能问题,因为它必须首先生成所有的文件路径然后再循环它们.
如果网页正在等待执行此操作的方法的响应,则添加到此处,您可以想象它看起来有点垃圾!
我有一个想法是在一个不合时宜的Web服务调用中将它包装起来,当它完成时它会激活对网页的响应,说它们已被删除了吗?也许将删除方法放在一个单独的线程中?或者甚至可以使用单独的批处理来执行删除?
在尝试计算目录中的文件数时,我遇到了类似的问题 - 如果它包含大量文件.
我想知道这是否有点矫枉过正?即有一个更简单的方法来处理这个?任何帮助,将不胜感激.
我有一个代码来删除文件夹和其中的所有文件。我只需要删除文件夹内的文件,而不是文件夹本身文件夹“1”,例如必须保留)...如何使用此代码完成此操作?
public class Deletefolder
{
public static void Main()
{
var dir = new DirectoryInfo(@"C:\d\wid\1");
dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
dir.Delete(true);
}
}
Run Code Online (Sandbox Code Playgroud) 这是我用来提取zip文件的代码,确保目标目录中没有任何脏文件
internal void UnzipProject()
{
if (Directory.Exists(SourceDir))
Directory.Delete(SourceDir, true);
if (File.Exists(CodeZipFile))
{
Directory.CreateDirectory(SourceDir); // fails here
ZipFile.ExtractToDirectory(CodeZipFile, SourceDir);
}
}
Run Code Online (Sandbox Code Playgroud)
有时Directory.CreateDirectory(SourceDir)
无法创建新的目录,我在下一行得到例外,但如果我退后一步并重试dir创建,它就可以了.下次执行时会重复完全相同的模式.
编辑
这是一个例外,实际上是关于dir没有被创建,我可以看到src目录不存在:
System.UnauthorizedAccessException was unhandled
HResult=-2147024891
Message=Access to the path '(...MyPath...)\src\MySolution.sln' is denied.
Source=mscorlib
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at …
Run Code Online (Sandbox Code Playgroud) 我尝试以编程方式清除firefox 8浏览器缓存.我正在使用asp.net开发网站,我需要清除浏览器缓存以确保安全性.我尝试了很多方法来清除缓存,但似乎都没有.有任何想法吗?
我不确定我是否正确地做了这个或者我的逻辑是否正确.
我试图去一个文件夹结构删除早于一定天数的文件,这部分我已经正确实现,删除空文件夹.
这一切都可以在一个循环中完成吗?
我在哪里删除文件夹?
我想删除最多3或4级的空文件夹.
private static void TraverseTree(System.IO.DirectoryInfo folder, double days)
{
Stack<string> dirs = new Stack<string>();
if (!folder.Exists)
throw new ArgumentException();
dirs.Push(folder.FullName);
while (dirs.Count > 0)
{
string currentDir = dirs.Pop();
string[] subDirs;
try
{
subDirs = System.IO.Directory.GetDirectories(currentDir);
}
// An UnauthorizedAccessException exception will be thrown if we do not have
// discovery permission on a folder or file. It may or may not be acceptable
// to ignore the exception and continue enumerating the remaining files and …
Run Code Online (Sandbox Code Playgroud) 我想删除整个文件夹或目录以及其中包含的文件和文件夹.如何在C#中实现?
我想删除文件夹中的所有文件,并删除其所有子文件夹和子子文件夹等中的所有文件,但我不想删除文件夹本身.
最简单的方法是什么?