在我的C#应用程序中,我已经有办法检查文件系统,但我想利用从主文件表(MFT)读取,因为它更快.我理解1)它是专有规范,因此如有更改,恕不另行通知; 2)只有在应用程序在管理权限下运行时才能访问它.
我设法通过此代码读取主文件表.从MFT查询中,我得到一个文件名和一个所谓的文件引用号.我找不到的是如何转换到.NET FileInfo对象,甚至转换到Windows API文件句柄,以便我可以获得有关文件/文件夹的更多信息,例如:文件大小,完整路径,日期邮票等
我有以下示例代码。
private DirectoryInfo PathDirectoryInfo
{
get
{
if (_directoryInfo == null)
{
// Some logic to create the path
// var path = ...
_directoryInfo = new DirectoryInfo(path);
}
return _directoryInfo;
}
}
public voide SaveFile(string filename)
{
if (!PathDirectoryInfo.Exists)
{
PathDirectoryInfo.Create();
}
// PathDirectoryInfo.Exists returns false despite the folder has been created.
bool folderCreated = PathDirectoryInfo.Exists; // folderCreated == false
// Save the file
// ...
}
Run Code Online (Sandbox Code Playgroud)
根据MSDN:
Exists属性:如果文件或目录存在,则为true;否则为false。否则为假。
创建目录后,为什么Exists返回false?我想念什么吗?
我需要在工作中的每个应用程序页面上包含上次修改日期.我过去通过在WebForms母版页底部包含对<%= LastModified%>的引用来执行此操作,该页面将返回当前.aspx页面的上次修改日期.我的代码甚至会检查相关的.aspx.cs文件,比较最后修改的日期,并返回最近的日期.
有谁知道你是否可以阅读MVC视图的FileInfo?如果可能的话,我想将它包含在母版页中.
我有一个基本控制器,所有接线都准备就绪.我需要知道的是如何访问当前视图的FileInfo.
namespace MyMVCApp.Controllers
{
public abstract class SiteController : Controller
{
public SiteController()
{
ViewData["modified"] = NEED TO GET FILEINFO OF CURRENT VIEW HERE;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个FileInfo包含~200.000个文件条目的数组.我需要找到所有具有相同文件名的文件.我需要每个重复文件的目录名和文件名的结果,因为我想在之后重命名它们.
我已经尝试过了:
我需要将所有文件从一个文件夹复制(Source)到另一个文件夹(Destination).我还需要比较两个文件夹并增加一个计数器,如果两个文件夹的内容与名称完全匹配,则计数器停止在100.
我不需要比较每个文件的大小,只需要比较名称.
这是我尝试过但我没有得到如上所述的欲望结果.
我在这里引用一些资源:http: //msdn.microsoft.com/en-us/library/bb546137.aspx
class Program
{
class FileCompare : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo>
{
public FileCompare() { }
public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2)
{
return (f1.Name == f2.Name &&
f1.Length == f2.Length);
}
public int GetHashCode(System.IO.FileInfo fi)
{
string s = String.Format("{0}{1}", fi.Name, fi.Length);
return s.GetHashCode();
}
}
static void Main(string[] args)
{
int i = 1;
string sourcePath = @"C:\Users\Administrator\Desktop\Source";
string destinationPath = @"C:\Users\Administrator\Desktop\Dest";
string fileName = System.IO.Path.GetFileName(sourcePath);
string source = System.IO.Path.Combine(sourcePath, fileName); …Run Code Online (Sandbox Code Playgroud) 你能帮我找出 Android 上 pdf 文档的页数吗?该文档至少支持 api 版本 16。我正在提取文档信息,但找不到获取总页数的解决方案。这就是我到目前为止所做的:
private void extractDocumentDataFromUri(Uri uri)
{
String[] dataFileds = new String[]{
MediaStore.MediaColumns.DATA,
OpenableColumns.DISPLAY_NAME,
OpenableColumns.SIZE};
Cursor cursor = context.getContentResolver().query(uri, dataFileds, null, null, null);
cursor.moveToFirst();
contentUrl = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
title = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
size = cursor.getInt(cursor.getColumnIndex(OpenableColumns.SIZE));
cursor.close();
contentType = context.getContentResolver().getType(uri);
}
Run Code Online (Sandbox Code Playgroud) 我写了以下代码:
public DataTable GetDotNetAssemblies(string baseDirectory)
{
DataTable MethodResult = null;
try
{
if (Directory.Exists(baseDirectory))
{
List<string> FilePaths = NetworkConnection.GetAllFilesUnderDirectory(baseDirectory);
DataTable dt = new DataTable();
dt.Columns.Add("Directory");
dt.Columns.Add("Filename");
dt.Columns.Add("Date modified");
dt.Columns.Add("Bytes");
dt.Columns.Add("User modified");
foreach (string FilePath in FilePaths)
{
DataRow dr = dt.NewRow();
FileInfo f = new FileInfo(FilePath);
List<string> AllowedExtensions = new List<string>();
AllowedExtensions.Add(".exe");
AllowedExtensions.Add(".dll");
if (AllowedExtensions.Contains(f.Extension.ToLower()))
{
dr["Directory"] = f.Directory;
dr["Filename"] = f.Name;
dr["Date modified"] = f.LastWriteTime;
dr["Bytes"] = f.Length.ToString();
string UserModified = "";
try
{
UserModified = f.GetAccessControl().GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
}
catch …Run Code Online (Sandbox Code Playgroud) 想象一个 winform 应用程序,它将更新的程序集从源文件夹 A 复制到目标文件夹 B。我使用简单的 DirectoryInfo.GetFiles 方法来填充列表视图,比较文件夹 A 和 B 中程序集的版本;如果某些程序集较新,我将启动更新方法。在这种方法中,在复制之前,我尝试一下B文件夹中的所有文件是否未被使用:
var B = new DirectoryInfo("myBfolder");
foreach (var file in aFolder.GetFiles())
{
try
{
//File not in use
File.Open(file.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (Exception ex)
{
//File in use!
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,因为之前的 UpdateListView 代码使用 FileInfo 来获取要显示的信息,所以我的所有文件都被使用了!
FileInfo 锁定文件!这可能吗?
有人可以建议一种方法来绕过这个问题吗?
谢谢你,南多
我有一个程序可以将文件或文件夹重命名为小写名称。我写了这段代码:
private void Replace(string FolderLocation, string lastText, string NewText)
{
if (lastText == "")
{
lastText = " ";
}
if (NewText == "")
{
NewText = " ";
}
DirectoryInfo i = new DirectoryInfo(FolderLocation);
string NewName = "";
if (checkBox2.Checked)
{
if (i.Parent.FullName[i.Parent.FullName.Length - 1].ToString() != "\\") //For parents like E:/
{
NewName = i.Parent.FullName + "\\" + i.Name.Replace(lastText, NewText);
}
else
{
NewName = i.Parent.FullName + i.Name.Replace(lastText, NewText);
}
NewName = NewName.ToLower();
if (NewName != i.FullName)
{
i.MoveTo(NewName); …Run Code Online (Sandbox Code Playgroud) 我试图理解以下问题。我正在读取文件的文件信息,如下所示:
FileInfo info = new FileInfo(path);
Run Code Online (Sandbox Code Playgroud)
然后,当我这样做时,代码会为我的文件返回16599774info.Length字节。当我将字节转换为MB时,我得到15.8 MB。
有人可以向我解释一下字节大小与 MB 大小之间的区别吗?
fileinfo ×10
c# ×7
.net ×4
file ×2
io ×2
android ×1
asp.net-mvc ×1
datatable ×1
directory ×1
file-io ×1
file-rename ×1
locking ×1
master-pages ×1
ntfs-mft ×1
pdf ×1