我需要检查文件夹中是否存在xml文件.
DirectoryInfo di = new DirectoryInfo(ProcessingDirectory);
FileInfo[] TXTFiles = di.GetFiles("*.xml");
if (TXTFiles.Length == 0)
{
log.Info("no files present")
}
Run Code Online (Sandbox Code Playgroud)
这是检查文件夹中存在的文件的最佳方法.
我需要检查一个xml文件是否存在
如何过滤多个分机?
我试过了:
FileInfo[] Files = dinfo.GetFiles("*.jpg;*.tiff;*.bmp");
FileInfo[] Files = dinfo.GetFiles("*.jpg,*.tiff,*.bmp");
Run Code Online (Sandbox Code Playgroud) 我正在创建一个备份应用程序,其中c#扫描目录.在我使用这样的东西之前,为了获取目录中的所有文件和子文件:
DirectoryInfo di = new DirectoryInfo("A:\\");
var directories= di.GetFiles("*", SearchOption.AllDirectories);
foreach (FileInfo d in directories)
{
//Add files to a list so that later they can be compared to see if each file
// needs to be copid or not
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,有时无法访问文件,我会收到几个错误.我得到的一个错误示例是:
结果我创建了一个递归方法,它将扫描当前目录中的所有文件.如果该目录中有目录,那么将再次调用该方法传递该目录.关于这个方法的好处是我可以将文件放在try catch块中,如果没有错误,可以选择将这些文件添加到List,如果我有错误,则将目录添加到另一个列表.
try
{
files = di.GetFiles(searchPattern, SearchOption.TopDirectoryOnly);
}
catch
{
//info of this folder was not able to get
lstFilesErrors.Add(sDir(di));
return;
}
Run Code Online (Sandbox Code Playgroud)
所以这个方法效果很好,唯一的问题是当我扫描一个大目录时需要很多次.我怎么能加快这个过程?我的实际方法是这样,以防你需要它.
private void startScan(DirectoryInfo di)
{
//lstFilesErrors is a list of MyFile objects
// I …
Run Code Online (Sandbox Code Playgroud) 我在c#(.NET 2.0 Framework)中创建了一个复制实用程序,它复制文件,目录和递归子目录等.该程序有一个GUI,显示当前正在复制的文件,当前文件编号(序列),总数要复制的文件数和复制操作的完成百分比.还有一个进度条,它基于当前文件/总文件.
我的问题与复制大文件有关.我一直无法找到一种方法来指示大文件的总复制进度(使用我当前使用FileInfo.CopyTo方法的类结构).作为一种解决方法,我将文件复制操作和GUI显示分离到它们自己的线程,并设置一个视觉提示来显示正在完成的工作.至少用户知道程序没有被冻结并且仍在复制文件.
能够基于总字节数显示进度或者具有从FileInfo.CopyTo方法触发的某种类型的事件会更好,该方法指示从当前文件复制的总字节数.
我知道FileInfo.Length属性,所以我确信MacGuyver有一种基于此的事件,并且在GUI端有一个处理器读取更新的处理程序(可能基于检查FileInfo).使用某种类型的计时器的目标对象的长度属性?).
有谁知道我要忽视的方法.如果我可以避免它,我宁愿不重写我的类来通过流复制字节并以这种方式跟踪它(虽然我想我可能会坚持走那条路).
提前致谢
PS - 我现在一直坚持使用.NET 2.0框架,所以任何需要> = 3.0的功能的解决方案都不适合我.
PPS - 我对任何.NET语言的解决方案都很开放,而不仅仅是c#.
我很好奇以下是什么行为:
FileInfo info = new FileInfo("C:/testfile.txt.gz");
string ext = info.Extension;
Run Code Online (Sandbox Code Playgroud)
这会返回".txt.gz"还是".gz"?
更多扩展的行为是什么,例如".txt.gz.zip"或类似的东西?
编辑:
要清楚,我已经测试了这个.我想要解释一下这个属性.
替换HTML文件内容的一部分时,String.Replace似乎无法正常工作.例如,String.Replace替换</body></html>
为blah blah blah </body></html> html>
- 注意第二个HTML结束标记未正确关闭,因此在用户在浏览器中呈现页面时显示.
任何人都知道它为什么不按预期工作?
StreamReader sr = fi.OpenText;
String fileContents = sr.ReadToEnd();
sr.close();
fileContents = fileContents.Replace("<body>", "<body onload='jsFx();' />");
fileContents = fileContents.Replace("</body>","blah blah blah </body>");
StreamWriter sw = new StreamWriter(fi.OpenWrite());
sw.WriteLine(contents);
sw.close();
Run Code Online (Sandbox Code Playgroud) 当我调用FileInfo(path).LastAccessTime
或FileInfo(path).LastWriteTime
正在写入的文件时,它返回创建文件的时间,而不是上次写入文件的时间(即现在).
有没有办法获得这些信息?
编辑:到目前为止的所有回复.我没有尝试,Refresh()
但也没有尝试过.我返回文件开始写入的时间.静态方法也是如此,并创建了一个新的实例FileInfo
.
Codymanix可能有答案,但我没有运行Windows Server(使用Windows 7),我不知道设置的测试位置.
编辑2:没有人觉得这个功能似乎不起作用很有趣?
使用File
对象的静态方法与创建新FileInfo
对象和调用这些方法之间有很大区别吗?
我试图确定上传文件的mime类型,我想使用fileinfo(),这是我一直在尝试,它不工作:
$uploadedfile = $_FILES['soup']['tmp_name'];
if(isset($uploadedfile))
{
$uploadedname = $_FILES['soup']['name'];
$file=$uploadedsong;
$file.=$uploadedname;
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $file);
Run Code Online (Sandbox Code Playgroud)
不幸的是,finfo_file
似乎没有运行,我假设我有以下$file
设置不正确,有没有办法,我可以使用$_FILE
这样的新上传的文件正确地做到这一点?或者我是以完全不正当的方式解决这个问题.使用我直接在另一个文件中预先设置的文件,并且设置$file="folder/file.doc"
正常.
是否可以在不使用C#的情况下获取文件的大小System.IO.FileInfo
?
我知道你可以分别使用Path.GetFileName(yourFilePath)
和得到其他东西,比如Name和Extension Path.GetExtension(yourFilePath)
,但显然不是文件大小?有没有其他方法我可以获得文件大小而不使用System.IO.FileInfo
?
唯一的原因是,如果我是正确的,FileInfo会抓取比我真正需要的更多的信息,因此如果我需要的唯一东西是文件的大小,那么收集所有这些FileInfo需要更长的时间.有更快的方法吗?