使用不同的文本编辑器打开文件
Opening a File with different text editors
显然这应该是可能的。例如,使用NOTEPAD或HxD打开和操作文件。但它们不都是文本文件吗?如何使用WINDOWS API指定打开文件和操作文件的文本编辑器。
希望我理解你的问题…要做到这一点,最简单的方法是启动所需的编辑器并将文件名作为参数传递,而不是"调用"文件(这会启动与文件类型相关的默认程序)。
例如:notepad.exe mytextfile.txt
、gvim.exe mytextfile.txt
。
如果编辑器不在你的%PATH%
上,你需要使用一个完整的路径文件名
你到底想干什么?你可以:
- 维护一个您希望安装的编辑器列表,并在系统的PATH中有条目(坏主意)
- 有一个你想要使用的编辑器/编辑器,查询Windows注册表以找到编辑器的安装路径(使用
RegGetValue
),并使用CreateProcess
启动编辑器(一个更好的主意) - 查询注册表以获取给定文件类型的默认编辑器,然后使用
CreateProcess
启动该编辑器。(好主意)
但这一切都取决于你的真正目标是什么。
根据需求编辑
所以,我们在同一页,从c++,你想:
- 给你的c++应用程序一个命令行参数(filename)
- 在任意编辑器中打开该文件
- 当用户对该文件进行更改时检测
- 对文件内容进行操作
正确吗?
如果是,你可以:
- 使用Boost库为文件 中的当前数据计算CRC
- 使用我最初描述的方法之一启动编辑器
- 坚持在一个紧密的循环和
sleep
,所以你不会咀嚼资源,而最初计算的CRC匹配一个计算的每次循环
- 如果用户不更改文件会发生什么?
- 如果找不到文件会发生什么?
我确信有许多不同的方法可以做到这一点,但这是我目前能想到的最简单的方法(同时仍然能够相当确定的变化)。
免责声明:我还没有实现过这样的东西,所以我可能完全错了;)
您正在寻找Windows上的ShellExecute()
或ShellExecuteEx()
api吗?它们将启动为文件注册的任何程序(通常基于文件扩展名)。
相关文章:
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- "未定义对'WinMain@16'的引用"gcc 编辑器中的错误
- 如何从C++而不是虚幻编辑器中添加静态网格体组件的值?
- UE4 - Visual Studio在我从编辑器添加新的c ++文件后无法打开任何源文件 - UBT_COMPILED
- 接收"Error compiling: 0:1(1): error: syntax error, unexpected $end" C++、GLSL、着色器文件
- 在编辑头文件时,VS Intellisense如何从stdafx.h中查找定义
- 图标编辑器中的自定义颜色 (VS 2015)
- Qt的QFontMetrics::horizontalAdvance()缺少代码编辑器实现
- 当有 icqdesktop 错误时如何编辑制作文件 (制作: *** [所有] 错误 2) Ubuntu 18.04 6
- 如何在文本编辑器中处理 [-Wc++11-extensions]
- 为什么Visual Studio 2017坚持认为我在其他地方没有打开的文件在编辑器之外被修改了?
- std::ifstream 在将文本编辑器从记事本++切换到Sublime Text 2以使用它正在读取的文件后无法读入?
- 是否可以使用十六进制编辑器从exe文件中删除代码?(c++)
- 使用文本编辑器打开一个 txt 文件,而它已经被 "fopen()" 打开并正在使用中?
- Qt Creator在使用其C++编辑器操作文件时崩溃
- 关于内存映射文件和使用大文件文本编辑器
- 如何在Qt/Android上的默认外部编辑器中打开文件
- 如何在编辑器中添加 c++ 头文件"gedit"?
- 使用不同的文本编辑器打开文件
- 设计:大型档案文件编辑器,文件映射