首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Fortran中更改SHBrowseForFolder的初始目录

在Fortran中更改SHBrowseForFolder的初始目录可以通过以下步骤实现:

  1. 导入所需的Windows API函数和数据类型:
代码语言:txt
复制
use, intrinsic :: iso_c_binding
interface
    ! 定义Windows API函数和数据类型
    function SHBrowseForFolder(lpbi As type(c_ptr)) bind(C, name='SHBrowseForFolderA')
        import
        type(c_ptr), value :: lpbi
        type(c_ptr) :: SHBrowseForFolder
    end function SHBrowseForFolder

    function SHGetPathFromIDList(pidl As type(c_ptr), pszPath As type(c_ptr)) bind(C, name='SHGetPathFromIDListA')
        import
        type(c_ptr), value :: pidl
        type(c_ptr), value :: pszPath
        type(c_int) :: SHGetPathFromIDList
    end function SHGetPathFromIDList

    subroutine CoTaskMemFree(pv As type(c_ptr)) bind(C, name='CoTaskMemFree')
        import
        type(c_ptr), value :: pv
    end subroutine CoTaskMemFree

    type, bind(C) :: ITEMIDLIST
        sequence
        type(c_short) :: mkid.cb
        type(c_ushort) :: mkid.abID(:)
    end type ITEMIDLIST

    type, bind(C) :: BROWSEINFO
        type(c_ptr) :: hwndOwner
        type(c_ptr) :: pidlRoot
        type(c_ptr) :: pszDisplayName
        type(c_char) :: lpszTitle(*) ! 标题
        type(c_int) :: ulFlags
        type(c_ptr) :: lpfn
        type(c_long) :: lParam
        type(c_ptr) :: iImage
    end type BROWSEINFO

    type, bind(C) :: CoTaskMemAlloc
        sequence
        type(c_size_t) :: cb
    end type CoTaskMemAlloc
end interface
  1. 编写Fortran子程序来更改SHBrowseForFolder的初始目录:
代码语言:txt
复制
subroutine SetInitialFolder(initialFolder)
    character(len=*), intent(in) :: initialFolder
    type(BROWSEINFO) :: bi
    type(ITEMIDLIST), pointer :: pidl
    character(len=:), allocatable :: pszPath
    type(CoTaskMemAlloc) :: ctmAlloc

    ! 初始化BROWSEINFO结构体
    bi%hwndOwner = c_null_ptr
    bi%pidlRoot = c_null_ptr
    bi%pszDisplayName = c_null_ptr
    bi%lpszTitle = c_null_ptr
    bi%ulFlags = 0
    bi%lpfn = c_null_ptr
    bi%lParam = 0
    bi%iImage = c_null_ptr

    ! 设置初始目录
    if (len_trim(initialFolder) > 0) then
        ! 分配内存以存储初始目录路径
        ctmAlloc%cb = (len(initialFolder) + 1) * c_sizeof(c_char)
        pszPath = c_loc(ctmAlloc)

        ! 将初始目录路径复制到分配的内存中
        call c_f_pointer(pszPath, pszPathChar)
        pszPathChar = initialFolder // c_null_char

        ! 设置BROWSEINFO结构体的pidlRoot字段
        bi%pidlRoot = c_loc(pszPath)
    end if

    ! 调用SHBrowseForFolder函数
    pidl = SHBrowseForFolder(c_loc(bi))

    ! 获取所选文件夹的路径
    if (associated(pidl)) then
        pszPath = c_loc(ctmAlloc)
        call SHGetPathFromIDList(c_loc(pidl), pszPath)
        call c_f_pointer(pszPath, pszPathChar)
        print *, "选择的文件夹路径:", trim(pszPathChar)
    end if

    ! 释放内存
    if (associated(pidl)) then
        call CoTaskMemFree(c_loc(pidl))
    end if
    if (allocated(pszPath)) then
        call CoTaskMemFree(c_loc(pszPath))
    end if
end subroutine SetInitialFolder
  1. 在主程序中调用SetInitialFolder子程序并传递初始目录路径:
代码语言:txt
复制
program main
    call SetInitialFolder("C:\Path\To\Initial\Folder")
end program main

这样,当运行Fortran程序时,SHBrowseForFolder对话框将显示初始目录为"C:\Path\To\Initial\Folder"。请注意,为了使上述代码正常工作,您需要在Windows操作系统上编译和运行Fortran程序,并且需要将Windows API函数和数据类型正确导入到Fortran代码中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Pythonchdir函数:更改工作目录利器

在Python,`chdir`是一个内置函数,用于更改当前工作目录。今天就给大家简单介绍一下该函数用法和一些注意事项,一起来学习一下吧。  ...什么是工作目录  在计算机操作系统,每个进程都有一个当前工作目录。文件操作通常是相对于该目录进行,也就是说,如果没有指定完整路径名,则文件操作将相对于当前工作目录进行。  ...`chdir`函数使用  `chdir`函数可以用于更改当前工作目录。它接受一个字符串参数,表示目标目录路径名。...注意事项  1、如果目标目录不存在,或者用户没有足够权限进行更改,则会引发`OSError`异常。  2、更改工作目录时,应当确保路径名是绝对路径,否则可能会发生错误。  ...然后,需要恢复之前工作目录时,可以调用`chdir`函数并将之前保存路径名作为参数传递。  4、在多线程或多进程环境,应当避免在不同线程或进程同时更改工作目录,以避免导致意外结果。

19440

何在Linux使用 chattr 命令更改文件或目录扩展属性?

在 Linux 操作系统,chattr 命令用于更改文件或目录扩展属性,包括可写性、可执行性和删除性等。本文将介绍 chattr 命令使用方法以及常见参数。...图片1. chattr 命令基本语法chattr 命令基本语法如下:chattr [选项] [文件或目录]选项包括:-R:递归地更改文件或目录属性。-v:显示命令执行详细信息。...,我们可以使用以下命令:$ chattr -i file.txt示例 2:禁止删除目录我们可以使用 chattr 命令禁止删除一个目录及其包含文件和子目录。...总结本文介绍了 chattr 命令使用方法及常见参数。我们可以使用 chattr 命令更改文件或目录扩展属性,包括可写性、可执行性和删除性等。常见属性包括 a、i、d 和 u 等。...我们可以根据实际需求选择相应属性,从而更好地保护文件或目录

3.6K20

何在keras添加自己优化器(adam等)

若并非使用默认安装路径,可参照根目录查看找到。 2、找到keras在tensorflow下目录 需要特别注意是找到keras在tensorflow下目录而不是找到keras目录。...一般来说,完成tensorflow以及keras配置后即可在tensorflow目录python目录中找到keras目录,以GPU为例keras在tensorflow下目录为C:\ProgramData...找到optimizers.pyadam等优化器类并在后面添加自己优化器类 以本文来说,我在第718行添加如下代码 @tf_export('keras.optimizers.adamsss') class...# 传入优化器名称: 默认参数将被采用 model.compile(loss=’mean_squared_error’, optimizer=’sgd’) 以上这篇如何在keras添加自己优化器...(adam等)就是小编分享给大家全部内容了,希望能给大家一个参考。

44.9K30

何在 Eclipse 更改注释块 @author 版权信息?

文章目录 前言 一、打开需要进行版权标注类 二、进入配置页面 三、编辑配置信息 四、测试 总结 ---- 前言 我们在使用 IDE——Ecilpse 进行开发,需要注明版权信息时候,如果不更改默认设置的话...,在注释块 @author 内容就是电脑系统默认,例如下图所示。...---- 一、打开需要进行版权标注类 打开 Ecilpse 需要备注一个类或者是方法开发者信息,默认是系统用户,如下我就是 Lenovo,如下图所示: ?...说明:${user}属性默认取值是我们本地管理员 user 信息。 例如联想电脑默认取 lenovo。我们将${user}属性更改为我们需要标注作者信息即可。 ?...---- 总结 本文我们掌握了如何在 Eclipse 修改注释版权信息,这样我们就无需每次手动去调整了。那么同学,你是否会在 IDEA 里面修改注释版权信息呢?

4.1K51

何在git删除指定文件和目录

部分场景,我们会希望删除远程仓库(比如GitHub)目录或文件。...具体操作 拉取远程Repo到本地(如果已经在本地,可以略过) $ git clone xxxxxx 在本地仓库删除文件 $ git rm 我文件 在本地仓库删除文件夹 $ git rm -r...我文件夹/ 此处-r表示递归所有子目录,如果你要删除,是空文件夹,此处可以不用带上-r。...提交代码 $ git commit -m"我修改" 推送到远程仓库(比如GitHub) $ git push origin xxxxxx 补充: git rm 查看git rm说明文档: $ git...-n, --dry-run 演习 -q, --quiet 不列出删除文件 --cached 只从索引区删除 -f, --force 忽略文件更新状态检查 -r 允许递归删除 --ignore-unmatch

3.4K20

何在MySQL 更改数据前几位数字?

前言在 MySQL 数据库,有时候我们需要对数据进行一些特定处理,比如更改数据某个字段前几位数字。这种需求可能涉及到数据清洗、数据转换或者数据修复等操作。...使用 SUBSTR 函数要更改数据字段前几位数字,可以使用 SUBSTR 函数来截取字段子串,并进行修改。...在使用 SUBSTR 函数时,要确保指定起始位置和截取长度是符合逻辑,以避免截取出错或数据损坏。确保更新操作条件准确无误,以免影响到不需要修改数据记录。...总结本文介绍了如何使用 MySQL SUBSTR 函数来更改数据字段前几位数字。通过合理 SQL 查询和函数组合,我们可以实现对数据灵活处理和转换。...在实际应用,根据具体需求和情况,可以进一步扩展和优化这种数据处理方式,使其更加高效和可靠。

18210

何在 Linux 中使用 chown 命令递归更改文件和目录用户和组所有权?

您可以在 Linux 中使用 chown 命令更改文件和目录所有权,使用起来非常简单。...chown owner_name file_or_folder当您更改目录所有权时,问题就来了,其内容保持不变,解决方案也不太复杂。...要更改目录所有内容所有权,可以使用递归选项 -R 和 chown 命令:chown -R owner_name folder_name如果要递归更改所有者和组,可以通过以下方式使用它:chown -R...递归 chown要递归更改目录所有权,请像这样使用它:chown -R new_owner_name directory_name如果您必须更改多个目录及其内容所有权,您可以在同一行执行此操作:chown...要递归更改目录所有者和组及其所有内容,请使用 chown 命令,如下所示:chown -R user_name:group_name directory_name您可以使用相同方法更改多个文件夹所有权

14.6K30

windows API实现用户选择文件路径对话框

在MFC能够弹出对话框供用户选择文件路径类是CFileDialog,但是这个类主要问题是当用户选择文件路径后,会打开相关文件,与我们要求不符,在Windows平台下有两个函数SHBrowseForFolder...这两个函数说明如下: LPITEMIDLIST WINAPI SHBrowseForFolder( LPBROWSEINFO lpbi ); 该函数主要作用是弹出一个对话框,便于用户选择文件路径...pidlRoot;//对话框显示最上层目录 LPTSTR pszDisplayName;//指向一个缓冲区,用于返回用户选择文件名 LPCTSTR lpszTitle;//文件对话框标题...另外是标志变量,一般使用是BIF_BROWSEINCLUDEFILES(允许用户选择文件)、BIF_RETURNONLYFSDIRS(只能选择目录,不能选择文件) 在用户选择了相关文件并点击对话框的确定时...之前需要调用该函数初始化相关环境 pil = SHBrowseForFolder(&bi); if (NULL !

2.4K20

何在 Ubuntu Linux 更改 DNS 并解决一些网速慢问题?

在本指南中,我们将教您如何将 Ubuntu DNS 更改为您想要任何内容。在某些情况下,更改 DNS 可以大大提高您Internet连接速度。...在此示例,我们将使用 Google DNS,但您可以使用您最喜欢任何内容。此外,我们还列出了2022 年最佳免费 DNS。...第 1 步:从终端更改 Ubuntu DNS最简单解决方案是更改/etc/resolv.conf文件配置,告知系统应将名称解析请求转发到何处。...所以,让我们首先更改这个文件:sudo nano /etc/resolv.conf更改名称服务器,仅保留以下选项:nameserver 8.8.8.8您在那里删除名称服务器 127.0.0.53 由systemd-resolved...浏览并分享您在评论浏览时发现不同之处。

4.4K20

何在 Linux 系统防止文件和目录被意外删除或修改

有个简单又有用命令行工具叫chattr(Change Attribute 缩写),在类 Unix 等发行版,能够用来防止文件和目录被意外删除或修改。...在这篇简短教程,我们一起来看看怎么在实际应用中使用 chattr 命令,来防止文件和目录被意外删除。...Linux防止文件和目录被意外删除和修改 默认,chattr 命令在大多数现代 Linux 操作系统是可用。...a – 只能向文件添加数据 A – 不更新文件或目录最后访问时间 c – 将文件或目录压缩后存放 C – 不适用写入时复制机制(CoW) d – 设定文件不能成为 dump 程序备份目标 D –...P – project 层次结构 s – 安全删除文件或目录 S – 即时更新文件或目录 t – 不进行尾部合并 T – 顶层目录层次结构 u – 不可删除 在本教程,我们将讨论两个属性使用,即

4.9K20

在Win下安装Visual Studio和Parallel Studio XE

本文将展示如何在Windows系统里安装最新版两款软件,以及如何调用MKL库。...英文网页对应“Free Visual Studio”,网页语言可下拉网页至底部,在左下角更改。 这是一个轻量交互式安装程序,需联网实时下载组件,安装跟着提示走即可。注意可以更改安装路径等。...接着设置安装目录和安装组件,示例如下图 ? 现在一般用不到32位库,可以不选。...安装完成后,启动Visual Studio,可发现多出了Fortran语言选项。 ? 默认Fortran编译器可能是Win32/x86,可以自己新建一个,选择x64。(下图是新建完后) ?...以后可能用到其他库(LAPACK)都在parallel studio目录里,比如笔者目录是 D:\Program Files\IntelSWTools\parallel_studio_xe_

7.2K31

何在Kerberos环境CDH集群外跨OS版本在指定目录配置HDFSGateway节点

集群外配置非Kerberos环境Gateway节点》和《如何在CDH集群外配置Kerberos环境Gateway节点》,本文档在这两篇文档本篇文章基础介绍如何在Kerberos环境CDH集群外跨OS...版本在指定目录配置HDFSGateway节点。...4.创建指定文件目录,并将集群KDC服务器上/etc/krb5.conf文件拷贝至(vm1.macro.com和rhel66001.localdomain)节点指定目录下查看,两个Gateway...5.登录集群任意节点,将集群Java目录拷贝至(vm1.macro.com和rhel66001.localdomain)节点指定目录下(/usr/java/jvm/),两个Gateway节点操作一致...5 问题描述与解决 1.core-site.xml 文件找不到异常 ? 该问题是由于在CDHhadoop客户端配置默认是在/etc/hadoop目录下,确认软链无误,并且配置正确 ?

1.3K20

强迫症治愈:如何在MATALB移除“警告:名称不存在或不是目录警告信息

作为强迫症患者,总是见不得MATLAB打开后,命令窗口弹出一堆“警告:名称不存在或不是目录:XXXXXXX”,如图1所示: 图1 警告信息 起初以为是默认搜索路径问题,于是乎打开设置路径对话框,但发现警告信息路径并没有相关路径...,如下图2示: 图2 搜索路径 紧接着又用path命令查看pathdef.m存储路径,结果发现里面还保留有图1所警告所有路径,极有可能是pathdef.m存储路径与图2所显示路径不一致造成...于是抱着试一试心态,尝试删掉pathdef.m多余路径,在命令窗口中输入如下命令: edit pathdef.m 随机来到了代码编辑区域,删掉图1路径,保存关闭重启MATLAB,警告信息果然不见了...,干净启动命令窗口又回来了!...参考资料:mathworks.com/help/matlab/ref/path.html 如需转载,请在公众号回复“转载”获取授权,如未经授权擅自搬运抄袭,本公众号将保留一切追责权利!

1.9K60

15个节省时间Jupyter技巧

魔法命令很有用,可以直接嵌入到python代码,并解决常见问题,例如列出当前目录所有文件或更改当前工作目录。 下面是一些常见魔术命令: %run:在当前内核运行Python脚本。...%matplotlib inline:在notebook显示图形。 %load_ext:加载扩展,例如IPython扩展。 %pwd:打印当前工作目录。 %ls:显示当前目录所有文件。...记住,使用多个游标可能会产生问题,所以最好在使用这个功能之前保存好你代码,以防你做了任何意想不到更改。 5、从另一个外部python脚本插入代码 可以用外部python脚本替换单元格内容。...ls print(files) 上面代码会把当前目录文件列表分配给files变量,并打印出来。...-z:删除所有已存储变量 你也可以使用一个%store命令存储多个值, %store var1 var2 %store命令仅在相同Jupyter会话中有效。

2K40

Codeblocks配合gfortran作为fortran开发环境配置方法

1,首先安装codeblockes,必须选完全安装(Full,All plugins,…),路径可以选默认路径即 C:/Program Files/CodeBlocks (如果安装到别的路径,后面提到路径请自行对应更改...3,安装含有gfortrangcc,注意:最好选择一个不带空格路径,更不要用中文路径,C:/gcc ,把路径记住。    ...4,让codeblocks使用gfortran,在codeblocks菜单中选 “设置”->“编译器和调试器”,选中“GNU GCC 编译器”,点“复制”,然后输入一个好记名字“my Gfotran...compiler”,打开“可执行工具链”,在“编译器安装目录”里找到C:/gcc,确定。...5,文件->新建->项目,选“empty project”,输入项目名,保存路径等,然后,在编译器下拉框,必须选择“my Gfotran compiler”其余默认,建好项目后,选文件->新建->文件

96130

CMake 秘籍(五)

Boost 库提供了丰富 C++编程基础设施,并且受到 C++开发者欢迎。我们已经在第三章,检测外部库和程序展示了如何在系统上找到 Boost 库。...interface_randomgen.f90,它封装了用于 Fortran 可执行文件 C 函数。 如何操作 我们有四个CMakeLists.txt实例需要查看:一个根目录和三个叶目录。...第三章配方 4,检测 BLAS 和 LAPACK 数学库,在第三章,检测外部库和程序,展示了如何检测用 Fortran 编写 BLAS 和 LAPACK 线性代数库,以及如何在 C++代码中使用它们...) 此命令将生成包含符号修饰宏fc_mangle.h头文件, Fortran 编译器所推断,并将其保存到当前二进制目录CMAKE_CURRENT_BINARY_DIR。...然而,我们不会将 pybind11 源代码明确放入我们项目目录,而是演示如何在配置时使用FetchContent(cmake.org/cmake/help/v3.11/module/FetchContent.html

42820

通过写“猜数字”游戏学习 Fortran | Linux 中国

Fortran 77 是我学习第一门编译型编程语言。一开始时,我自学了如何在 Apple II 上用 BASIC 编写程序,后来又学会在 DOS 上用 QBasic 编写程序。...但是当我去大学攻读物理学时,我又学习了 FortranFortran 曾经在科学计算很常见。曾几何时,所有计算机系统都有一个 Fortran 编译器。...要表示跨行,请在第 6 列输入一个连续字符(通常是 +)。 要创建注释行,请在第 1 列输入 C 或 *。...虽然有这些限制,你仍然可以编写非常有用和有趣程序。 在 Fortran 猜数字 通过编写“猜数字”游戏来探索 Fortran。...Fortran 程序无法从操作系统初始化随机数生成器,因此你必须始终使用“种子”值和 SRAND 子程序(subroutine) 启动随机数生成器。

1.9K30

CMake 秘籍(四)

然而,之前方法一个不满意之处是,如果我们更改分支或提交更改后配置代码,源代码包含版本记录可能会指向错误 Git 哈希。...有人可能会说,对于这个小小代码示例来说,项目包含目录太多了,但请记住,这只是一个简化示例,通常每个库都包含许多源文件,理想情况下像这里一样组织在单独目录。...使用要求,包含目录、编译标志和链接库设置在OBJECT库上将正确继承。...第 7 个配方,使用add_subdirectory限制范围所述,这种方法可以扩展到大型项目,无需在目录之间携带源文件列表全局变量,并且具有隔离作用域和命名空间额外好处。...在本配方中,我们没有指定 Fortran 模块文件应放置目录,并保持了这种透明性。可以通过设置CMAKE_Fortran_MODULE_DIRECTORY CMake 变量来指定模块文件位置。

17820

何在Fortran调用Python

那么我们应该将基于Python机器学习迁移到Fortran模型吗?数据科学领域可能会利用HTTP API(比如Flask)封装机器学习方法,但是HTTP在紧密耦合系统(比如气候模式)效率太低。...因此,可以选择直接从Fortran调用Python,直接通过RAM传递气候模式状态,而不是通过高延迟通信层,比如HTTP。...•首先,必须在header.h中进行C头文件声明•然后,执行函数必须要在builder.pymodule字符串,或一个外部模块•最后,Fortran代码必须包含定义子程序interface块(...get和set函数功能主要就是将Fortran数组传递给STATA或者从STATE取出Fortran数组。...为了解决频繁更改接口问题,我们将fortran数据放到了Python模块字典

5.8K40
领券