代码之家  ›  专栏  ›  技术社区  ›  FlyingFoX Stephen Cleary

SMB访问绕过文件共享冲突

  •  0
  • FlyingFoX Stephen Cleary  · 技术社区  · 5 年前

    \hard disk2\logs\myfile.err .
    myapp.exe 2> "\hard disk2\logs\myfile.err" .

    myfile.err 具有 NotepadCE myapp.exe 正在运行。如果我尝试NotepadCE显示共享冲突错误。

    同一个文件可以由其smb共享在同一时间读取,而不会出现任何问题。

    有没有办法让windowsce机器上的其他程序不停地读取这个文件 我的应用程序.exe

    作为解决方法,我设法将文件复制到另一个位置,然后从那里读取它。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Carsten Hansen ctacke    5 年前

    为什么可以通过smb读取,但无法以其他方式读取?

    CreateFile .

    例如,打开文件时

    CreateFile(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, ...)
    

    请求读访问,同时允许其他人读写。这很可能是SMB服务所做的。

    CreateFile(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, ...)
    

    请求读/写访问权限,同时阻止其他人写入。批处理脚本可能会这样做。

    最后,NotepadCE可能试图使用

    CreateFile(路径、通用|读取|通用|写入、文件|共享|读取,…)
    

    它将失败,因为它正在请求批处理解释器仅通过传递拒绝的写访问 FILE_SHARE_READ 创建文件 打电话。

    More about CreateFile in the Docs.

    有没有办法让Windows CE计算机上的其他程序在不停止myapp.exe的情况下读取此文件?

    有点,是的。与其重定向stderr,不如让myapp.exe将其输出直接写入myfile.err,传递 FILE_SHARE_READ | FILE_SHARE_WRITE 创建文件