标签: ntfs

在Python中创建NTFS交接点

有没有办法在Python中创建NTFS交接点?我知道我可以调用该junction实用程序,但最好不要依赖外部工具.

python windows ntfs junction

15
推荐指数
3
解决办法
8285
查看次数

在.NET中,如何在NTFS中创建连接,而不是Symlink?

我正在尝试创建一个NTFS Junction.从cmd行我可以使用sysinternals中junction.exe工具执行此操作.结点的DIR cmd输出如下所示:

 Volume in drive C has no label.
 Volume Serial Number is C8BC-2EBD

 Directory of c:\users\cheeso\Documents

03/22/2009  09:45 PM    <JUNCTION>     My Music [\??\c:\users\cheeso\Music]
05/11/2007  05:42 PM    <DIR>          My Received Files
03/22/2009  09:46 PM    <JUNCTION>     my videos [\??\c:\users\cheeso\Videos]
Run Code Online (Sandbox Code Playgroud)

我在某地读过Junctions是Symbolic Links的子集.

所以我尝试使用CreateSymbolicLink创建一个Junction.当我这样做时,我实际上得到了一个符号链接,而不是一个连接点.

09/09/2009  11:50 AM    <SYMLINKD>     newLink [.\]
Run Code Online (Sandbox Code Playgroud)

还有CreateHardLink.那里的文档说交汇点(又名"重新分析点")是硬链接的子集.但我似乎无法接受这项工作.它完成但没有创建硬链接或联结.

我正在使用.NET/C#,导入如下所示:

    [Interop.DllImport("kernel32.dll", EntryPoint="CreateSymbolicLinkW", CharSet=Interop.CharSet.Unicode)]
    public static extern int CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags);

    [Interop.DllImport("kernel32.dll", EntryPoint="CreateHardLinkW", CharSet=Interop.CharSet.Unicode)]
    public static extern bool CreateHardLink(string lpFileName, …
Run Code Online (Sandbox Code Playgroud)

.net pinvoke winapi ntfs deviceiocontrol

15
推荐指数
1
解决办法
8130
查看次数

如何强制Robocopy覆盖文件?

通常,Robocopy会忽略lastwrittendate和filesize相同的文件.我们怎样才能摆脱这种设计?我想用Robocopy强制覆盖.

我希望dst\sample.txt应该写成test001.但是这些文件被Robocopy识别为相同的文件而不会被覆盖.在这种情况下,"/ IS"选项无效.

New-Item src -itemType Directory
New-Item dst -itemType Directory
New-Item src\sample.txt -itemType File -Value "test001"
New-Item dst\sample.txt -itemType File -Value "test002"
Set-ItemProperty src\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"
Set-ItemProperty dst\sample.txt -Name LastWriteTime -Value "2016/1/1 15:00:00"

ROBOCOPY.exe src dst /COPYALL /MIR
Get-Content src\sample.txt, dst\sample.txt
> test001
> test002

ROBOCOPY.exe src dst /COPYALL /MIR /IS
Get-Content src\sample.txt, dst\sample.txt
> test001
> test002
Run Code Online (Sandbox Code Playgroud)

windows powershell ntfs robocopy

14
推荐指数
2
解决办法
7万
查看次数

什么可能导致XML文件填充空字符?

这是一个棘手的问题.我怀疑它需要一些文件系统的高级知识才能回答.

我有一个针对.NET framework 4.0的WPF应用程序"App1".它有一个Settings.settings文件,用于生成App1.exe.config存储默认设置的标准文件.当用户修改设置时,修改将进入AppData\Roaming\MyCompany\App1\X.X.0.0\user.config.这是所有标准的.NET行为.但是,有时,我们发现user.config客户机器上的文件不是应该的,导致应用程序崩溃.

问题看起来像这样:user.config如果用XML填充它应该是大小,但是它只是一堆NUL字符而不是XML.它的角色0一遍又一遍地重复着.我们没有关于导致此文件修改的内容的信息.

在此输入图像描述

如果我们只是删除,我们可以在客户的设备上修复该问题,user.config因为公共语言运行时只会生成一个新问题.他们将失去他们对设置所做的更改,但可以再次进行更改.

但是,我在另一个带有另一个XML文件的WPF应用程序"App2"中遇到了这个问题info.xml.这次是不同的,因为文件是由我自己的代码而不是CLR生成的.常见的主题是两个都是C#WPF应用程序,都是XML文件,在这两种情况下,我们完全无法在测试中重现问题.这可能与C#应用程序与XML文件或文件交互的方式有关吗?

我们不仅无法在当前的应用程序中重现该问题,而且我甚至无法通过编写有意产生错误的自定义代码来重现该问题.我找不到单个XML序列化错误或文件访问错误导致文件填充空值.那么可能会发生什么?

App1 user.config通过调用Upgrade()以及Save()获取和设置属性来访问.例如:

if (Settings.Default.UpgradeRequired)
{
    Settings.Default.Upgrade();
    Settings.Default.UpgradeRequired = false;
    Settings.Default.Save();
}
Run Code Online (Sandbox Code Playgroud)

info.xml通过序列化和反序列化XML来访问App2 :

public Info Deserialize(string xmlFile)
{
    if (File.Exists(xmlFile) == false)
    {
        return null;
    }

    XmlSerializer xmlReadSerializer = new XmlSerializer(typeof(Info));

    Info overview = null;

    using (StreamReader file = new StreamReader(xmlFile))
    {
        overview = (Info)xmlReadSerializer.Deserialize(file);
        file.Close();
    }

    return overview;
}

public void …
Run Code Online (Sandbox Code Playgroud)

c# xml filesystems ntfs null-character

14
推荐指数
1
解决办法
2602
查看次数

NTFS中是否有文件路径的长度限制?

为什么我不能在NTFS文件系统中创建路径中的字符大于255的深层路径?它似乎是FAT32的限制,但也存在于NTFS中?有人可以提供一些文件吗?

非常感谢!

ntfs path maxlength

13
推荐指数
1
解决办法
1万
查看次数

UNIX命令mv和rm如何处理打开的文件?

如果我正在读取存储在NTFS文件系统上的文件,并且我尝试在该文件仍被读取时移动/重命名该文件,我将无法这样做.如果我在UNIX文件系统(例如EXT3)上尝试此操作,则会成功,并且执行读取的进程不受影响.我甚至可以将文件和阅读过程不受影响.这是如何运作的?有人可以向我解释为什么在UNIX文件系统下支持这种行为而不支持NTFS吗?我有一种模糊的感觉,它与硬链接和inode有关,但我很感激一个很好的解释.

unix filesystems ntfs mv

13
推荐指数
2
解决办法
6772
查看次数

根据磁盘ID删除文件

如上所述这里,使用SetFileInformationByHandleFILE_DISPOSITION_INFO 允许一个设置文件有打开的句柄在被关闭所有句柄被删除.

不过,我想删除的检索基于其文件索引(磁盘ID)的文件FILE_DISPOSITION_INFO,并 OpenFileById以安全地删除其中的区别仅在情况下的目录文件/目录.这在我的用例中是安全的,因为在NTFS系统上,文件索引在删除之前持久的,否定ReplaceFile当前代码库处理的使用.

但是,在尝试删除句柄时,我收到错误87(ERROR_INVALID_PARAMETER).如果我使用创建的句柄删除CreateFileW,我遇到没有问题.但是,我无法做到这一点,因为Windows无法区分同一案例的两个文件/文件夹,即使NTFS可以.

我也知道打开硬链接文件存在歧义OpenFileById,因为硬链接文件共享相同的磁盘ID.可以认为硬链接文件的问题与此方案无关.我只会按ID删除目录,不能硬链接.

我的OpenFileById通话中是否有参数或设置?不知怎的,在我的SetFileInformationByHandle电话里?

我试过的其他方法:

  • 调用DuplicateHandleOpenFileById处理,提供DELETEdwDesiredAccess和使用.ERROR_INVALID_PARAMETER结果相同.
  • 使用ReOpenFileOpenFileById处理,提供DELETEdwDesiredAccess和使用.ERROR_INVALID_PARAMETER结果相同.
  • 使用ReOpenFileOpenFileById处理,提供DELETEdwDesiredAccess,并提供FILE_FLAG_DELETE_ON_CLOSE标志.没有给出错误,但在关闭所有句柄后文件仍然存在.

这是一个简单但完整的示例,它可以重现问题:

#include <stdio.h>
#include <sys/stat.h>
#include <Windows.h>

DWORD getFileID(LPCWSTR path, LARGE_INTEGER *id)
{
    HANDLE h …
Run Code Online (Sandbox Code Playgroud)

c winapi ntfs createfile

13
推荐指数
1
解决办法
652
查看次数

如何在NTFS上创建稀疏文件?

我正在测试一个稀疏文件.但我的测试代码效果不佳.

HANDLE h = CreateFileW(L"D:\\sparse.test",
        GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
        0,
        CREATE_ALWAYS,
        FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_SPARSE_FILE,
        0);

DWORD d = GetFileAttributes(L"D:\\sparse.test");
// The function returns 32(FILE_ATTRIBUTE_ARCHIVE).
// Where is FILE_ATTRIBUTE_SPARSE_FILE flag?
// How do I make a sparse file.

DWORD written;
WriteFile(h, "aaa", 3, &written, 0);
SetFilePointer(h, 2*1024*1024*1023, 0, FILE_BEGIN);
SetEndOfFile(h);
WriteFile(h, "bbb", 3, &written, 0);
Run Code Online (Sandbox Code Playgroud)

windows file-io winapi ntfs sparse-file

12
推荐指数
2
解决办法
3403
查看次数

如何直接从磁盘复制锁定的文件并确保文件完好无损?

我正在编写的应用程序需要能够复制被锁定的文件.我们尝试使用卷影复制,虽然它成功复制了文件,但是对文件进行锁定的应用程序崩溃了,因为在我们复制文件时它无法获取锁定.

我不得不相信我唯一的选择是绕过操作系统并直接从磁盘读取.问题是如果我直接读到磁盘我不能确定文件的完整性,如果它在写入的中间,文件将处于损坏状态.

经过几个小时的搜索,我能够找到一个直接从磁盘复制文件的实用程序,并使用文件系统驱动程序在复制时缓存写入,以便确保文件处于完整状态.但是,该实用程序非常昂贵,我可能需要使用的许可证为100k +.

有没有人对如何完成我想要的事情有任何想法?

我们计划仅将系统限制为NTFS卷.

c filesystems file-io ntfs disk

12
推荐指数
1
解决办法
2542
查看次数

在NTFS上的驱动器之间移动文件夹并保留时间戳

对不起,我知道这听起来像是一个新手问题.但说真的,我是一个经验丰富的开发人员,我明白Windows 7 Pro 64位之类的人会说,"哦,如果你将一个NTFS树从一个驱动器移动到另一个驱动器,当我编写那些真正意味着的子文件时我正在修改父文件夹,所以我将更新其时间戳." 所以我最终得到的所有目标文件都具有与原始文件相同的时间戳,但所有文件夹都具有相同的刚刚修改的日期/时间.

所以我明白发生了什么.而且我知道我可以编写自己的实用程序(我有)在NTFS上复制/移动文件.但实用程序存在风险 - 如果它们不支持NTFS,它们可能会忽略其他属性或错过NTFS备用数据流(ADS)等.

那么有没有人知道一个好的,NTFS感知的树移动实用程序,它只需移动所有树并保持时间戳?我不想冒任何损失的风险.谢谢.

directory timestamp ntfs ads move

12
推荐指数
1
解决办法
3万
查看次数