我正在编写的应用程序需要能够复制被锁定的文件.我们尝试使用卷影复制,虽然它成功复制了文件,但是对文件进行锁定的应用程序崩溃了,因为在我们复制文件时它无法获取锁定.
我不得不相信我唯一的选择是绕过操作系统并直接从磁盘读取.问题是如果我直接读到磁盘我不能确定文件的完整性,如果它在写入的中间,文件将处于损坏状态.
经过几个小时的搜索,我能够找到一个直接从磁盘复制文件的实用程序,并使用文件系统驱动程序在复制时缓存写入,以便确保文件处于完整状态.但是,该实用程序非常昂贵,我可能需要使用的许可证为100k +.
有没有人对如何完成我想要的事情有任何想法?
我们计划仅将系统限制为NTFS卷.
我想在.NET中使用NTFS压缩来压缩文件夹.我找到了这篇文章,但它不起作用.它抛出异常("无效参数").
DirectoryInfo directoryInfo = new DirectoryInfo( destinationDir );
if( ( directoryInfo.Attributes & FileAttributes.Compressed ) != FileAttributes.Compressed )
{
string objPath = "Win32_Directory.Name=" + "\"" + destinationDir + "\"";
using( ManagementObject dir = new ManagementObject( objPath ) )
{
ManagementBaseObject outParams = dir.InvokeMethod( "Compress", null, null );
uint ret = (uint)( outParams.Properties["ReturnValue"].Value );
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何在文件夹上启用NTFS压缩?
我可能会参与一个项目,其中一个重要组件是大量文件的存储(在这种情况下是图像,但它应该只是作为文件存储).
传入文件的数量预计约为每周500,000(平均每个约100 Kb),每天大约100,000个文件,每秒5个.在达到平衡状态之前,文件总数预计将达到数千万,其中文件因输入速率的各种原因而过期.
所以我需要一个系统,可以在高峰时间每秒存储大约5个文件,同时读取大约4个文件并随时删除4个文件.
我最初的想法是,一个简单的NTFS文件系统,其中包含一个简单的存储,过期和读取服务应该足够了.我可以想象服务创建每年,每月,每天和每小时的子文件夹,以保持每个文件夹的文件数量最少,并允许手动过期以防需要.
这里讨论了一个大型的NTFS解决方案,但我仍然可以使用一些建议来解决在构建具有上述规范的存储时会遇到的问题,期望的维护问题以及存在哪些替代方案.优选地,如果可能且实用的话,我想避免分布式存储.
编辑
感谢所有的意见和建议.关于该项目的更多奖励信息:
这不是最终用户提供图像的Web应用程序.没有透露太多,因为这是在合同阶段,它更多的是质量控制类别.想想带有传送带和传感器的生产工厂.这不是传统的质量控制,因为产品的价值完全取决于图像和元数据数据库的顺利运行.
自治应用程序以先进先出的顺序访问图像99%,但也会发生用户应用程序的随机访问.超过一天的图像将主要用于存档目的,但这一目的也非常重要.
由于各种原因,图像的到期遵循复杂的规则,但在某些日期,应删除所有图像.删除规则遵循依赖于元数据和用户交互的业务逻辑.
每天都会有停机时间,可以进行维护.
优选地,文件存储器不必将图像位置传送回元数据服务器.如果选择某种散列或分布式系统,则可以通过映射数据库从元数据中唯一地扣除图像位置.
所以我的问题是:
我注意到用户C:\Program Files\WindowsApps的访问权限应用了一个特殊的“条件”:。EXISTS WIN://SYSAPPID
我没有找到任何有关 ACL 条件或如何创建和利用此类内容的信息。
如何创建和利用 ACL 条件?
我想通过哈希搜索文件副本.出于性能目的,我想知道NTFS/FAT文件系统中的每个文件是否存在存储的哈希/校验和.如果有,我不必全部计算它们来搜索我的文件.
如果有,如何使用.NET访问它?
如果有帮助,它将是JPEG文件.他们有校验和吗?
我从以下代码中获取了一个重复的FileSystemAccessRule:
C:\inetpub\wwwroot\AspInfo\Account
BUILTIN\IIS_IUSRS : Allow : ReadAndExecute, Synchronize
BUILTIN\IIS_IUSRS : Allow : -1610612736
NT SERVICE\TrustedInstaller : Allow : FullControl
NT SERVICE\TrustedInstaller : Allow : 268435456
Run Code Online (Sandbox Code Playgroud)
而我无法弄清楚它是什么或为什么.
并且显示的权限与我可以看到的文件FileManager属性不匹配.例如,如何从此迭代或类似迭代中找到"列出文件夹内容"权限.如果有人知道.NET文档中的示例,那将会有所帮助.
protected void directoryInfo()
{
var di = new DirectoryInfo(Server.MapPath("/"));
foreach (DirectoryInfo dir in di.GetDirectories())
{
Response.Write(dir.FullName + "<br/>");
DirectorySecurity ds = dir.GetAccessControl();
foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
string userName = fsar.IdentityReference.Value;
string userRights = fsar.FileSystemRights.ToString();
string userAccessType = fsar.AccessControlType.ToString();
Response.Write(userName + " : " + userAccessType + " : " …Run Code Online (Sandbox Code Playgroud) 我想提供一种方法来识别何时将大文件分段到某个程度,并在用户执行碎片整理时提醒用户.另外,我想向他们展示一个视觉显示,演示文件如何在磁盘上实际分成碎片.
我不需要知道如何计算它是多么碎片化,或者如何进行视觉显示.我需要知道的是两件事:1)如何识别包含任何特定给定文件的任何磁盘上的特定集群,以及2)如何识别该磁盘上的集群总数.我基本上需要一个包含该文件片段的所有集群的列表,以及每个集群所在的磁盘上的位置.
大多数碎片整理实用程序都有一个可视化显示,显示文件如何在磁盘上传播.我的显示屏将显示一个特定文件如何分成磁盘的不同区域.我只需要知道如何检索必要的数据来告诉我文件的簇/扇区在磁盘上的位置,这样我就可以进一步确定它是多么碎片化.
我发现我的磁盘上有一些文件,
1)实际大小不为零,但它很小,大约500字节
2)当你检查它的属性时,"磁盘上的大小"显示为零
3)如果我制作文件更小,"磁盘上的大小"仍为0
4)如果我使文件更大,甚至更大1个字节,磁盘上的大小将更改为4096
5)磁盘未压缩
怎么可能?我的操作系统是Windows 8.1:这是Windows 8中的新功能吗?
Windows 8是否如此智能以至于它可以将这些小文件合并到一个磁盘扇区中?
任何人都可以证实吗?
如果它是一个新功能,如何禁用它?
NTFS文件可以包含对象ID.可以使用这些ID进行设置FSCTL_SET_OBJECT_ID.但是,msdn文章说:
修改对象标识符可能导致文件部分丢失数据,直至并包括整个数据量.
但它没有详细说明.这怎么会导致数据丢失?它是在讨论文件系统中潜在的对象id冲突吗?NTFS是否以某种方式依赖它们?
侧节点:我在找到该段落之前做了一些实验,并设置了一些新创建的文件的对象id,这里希望我的文件系统仍然完好无损.
是否有一个工具可以显示磁盘上的特定文件,它有多碎片?(如果我以线性方式读取该文件,物理磁盘需要进行多少次搜索)
ntfs ×10
filesystems ×5
windows ×5
.net ×2
c# ×2
acl ×1
architecture ×1
c ×1
disk ×1
diskspace ×1
fat ×1
file ×1
file-io ×1
performance ×1
permissions ×1
winapi ×1