- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试编写一个程序来读取文件,同时允许其他应用程序访问它。我了解到,在 Windows 中,您需要传递 syscall.FILESHARE_READ/WRITE 标志以防止文件锁定。但是,引入这些标志首先限制了我读取文件,并出现错误 — read ‘file’: Access is denied。这是我的代码:
os.OpenFile(path, syscall.O_RDONLY | syscall.FILE_SHARE_WRITE | syscall.FILE_SHARE_READ, 0444)
我使用的标志是否正确? Windows 是否允许此功能?
这是一个示例 Go 程序使用此命令构建 - GOOS=windows GOARCH=amd64 go build -v -o testRead.exe
package main
import (
"fmt"
"os"
"time"
"bufio"
"syscall"
)
func main() {
if len(os.Args) != 2 {
fmt.Println("Specify file!")
return
}
path := os.Args[1]
f, err := os.OpenFile(path, syscall.O_RDONLY|syscall.FILE_SHARE_WRITE | syscall.FILE_SHARE_READ, 0444)
//f, err := os.Open(path)
if err != nil {
fmt.Println("Can't open file")
fmt.Println(err)
return
}
defer f.Close()
reader := bufio.NewReader(f)
line, _, err := reader.ReadLine()
if (err != nil) {
fmt.Println(err)
}
fmt.Println(line)
// Keeps the program alive
t1 := time.Now().Local().Add(time.Second * time.Duration(3))
for {
if time.Now().After(t1) {
fmt.Println("Still Alive!")
t1 = time.Now().Local().Add(time.Second * time.Duration(3))
}
}
}
我观察到使用 os.Open 和 os.OpenFile(path, syscall.O_RDONLY, 0444) 读取效果很好。
最佳答案
XY 问题是询问您尝试的解决方案而不是您的实际问题:The XY Problem .
如果我们用
打开文件f, err := os.OpenFile(path, syscall.O_RDONLY, 0444)
您的程序运行没有错误。
在 Windows 上,程序使用 CreateFile与
DesiredAccess = GENERIC_READ
ShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE
由于某些未知原因,您在 Windows 上使用了任意 os.OpenFile
flag
bit smashing。
f, err := os.OpenFile(path, syscall.O_RDONLY|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_READ, 0444)
在哪里
const (
O_RDONLY = 0x00000
O_WRONLY = 0x00001
O_RDWR = 0x00002
FILE_SHARE_READ = 0x00000001
FILE_SHARE_WRITE = 0x00000002
)
用不相关的文件共享位粉碎 os.OpenFile
flag
模式位,你有
flag = syscall.O_RDONLY|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_READ
或
flag = O_RDONLY|O_WRONLY|O_RDWR
结果未定义。
在 Windows 上,报错:read test.file: Access is denied.
。
在 Linux 上,检测到错误:read test.file: bad file descriptor
。
关于Windows OpenFile 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110943/
我想打开一个文件,将其拖放到应用程序图标上。当我这样做时,我的应用程序被打开,因此文件扩展名定义明确并且与我的应用程序相关。但是 application:openFile: 函数永远不会被调用。所以我
我正在尝试“即时”格式化openfiles.exe的输出,而不是将输出保存到CSV并导入。 如果我只运行openfiles /query /s SERVERNAME /fo table,我会得到 ID
我正在尝试编写一个程序来读取文件,同时允许其他应用程序访问它。我了解到,在 Windows 中,您需要传递 syscall.FILESHARE_READ/WRITE 标志以防止文件锁定。但是,引入这些
当我尝试向文件写入内容时出现“openFile - permission denied”错误: saveFile content path = do writeFile path (s
我一直在尝试在运行的 Eclipse session 中从命令行打开文件。基于documentation ,我应该可以做到 eclipse --launcher.openFile myfilename
当给定由\n 分隔的文本输入文件时,该程序会产生我期望的输出: import System.IO main :: IO () main = do h IO [String] getlines h =
我正在尝试创建一个aspx页面,在该页面中我可以直接将文件从客户端上传到服务器,而无需用户干预。我想做一些事情,比如当用户在 url 中指定文件路径时,必须将该特定文件上传到服务器。 示例:ht.tp
void openfile(FILE *fichier,char *str){ char path; path=(char*)malloc(sizeof(char)); fic
我一直在关注有关 allegro 5 平台游戏的教程,他的文件管理器使用 !openFile.eof(),我听说它不太好,我很确定它是什么给我一个 vector 下标超出范围错误。除了它还有什么我可以
Vista 引入了一个接口(interface):IFileDialog::SetFilter,它允许我设置一个过滤器,该过滤器将为每个可能的文件名调用以查看它是否应该显示给用户。 Microsoft
我正在尝试为 db4o 创建一个通用的助手类。 我创建了一个静态类,它应该在每个应用程序页面中充当助手。 这是我的代码: public final class DatabaseHelper imple
我目前遇到了 os.OpenFile 的问题。当我运行我的 go 测试时,它只是给我“权限被拒绝”。 type log struct { Message string Source
像这样使用时 [ [NSWorkspace sharedWorkspace] openFile:fileName withApplication:appName]; 并且文件名包含空格 另一个应用程序
我正在使用 kube-aws 在 AWS 上创建 kubernetes 集群,我有 kube-aws 版本 v0.12.3,当我尝试时,工作节点上经常出现“系统中打开的文件太多”的问题ssh 进入工作
大多数gif捕捉软件都是捕捉屏幕,然后将其一帧一帧的图片文件保存在磁盘上,然后读入内存并组合成gif,整个过程非常缓慢。 我想到了用DirectX捕获屏幕(这样我们也可以更快地捕获directx窗口,
我已经在 the msdn doc 中查看了这段代码: Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDia
我正在尝试编写一个应用程序,它可以处理 ftp 服务器上的文件。我需要在一个 ftp 连接中打开多个文件。我这样做 CInternetSession session(_T("Session1"));
当我以这样的模式打开文件时: file, _ := os.OpenFile("/path/to/my/file", os.O_RDWR|os.O_APPEND, os.FileMode(0666))
我想通过以下功能打开并引用工作簿。只有函数会产生运行时错误“91”:在跳回主代码之前未设置对象变量或 block 变量。 当我将确切的代码(只是不是函数)放入我的主代码时,它可以完美地工作。 但是我不
我已经在一个网站上工作了大约一个月,最近我尝试烘焙一些东西,现在我真的被刚刚弹出的缓存权限问题困住了。例如,我已经阅读了有关此问题的 stackoverflow 上的所有内容: SplFileInfo
我是一名优秀的程序员,十分优秀!