Unity调用系统选择文件功能实现文件的选择及另存为

这篇具有很好参考价值的文章主要介绍了Unity调用系统选择文件功能实现文件的选择及另存为。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.系统文件选择结构体

using System;
using System.Runtime.InteropServices;
using UnityEngine;
using System.Collections;

/// <summary>
/// windows系统文件选择窗口
/// </summary>
[StructLayout(LayoutKind.Sequential,CharSet = CharSet.Auto)]
public struct OpenFileName
{
    public int structSize;
    public IntPtr dlgOwner;
    public IntPtr instance;
    public String filter;
    public String customFilter;
    public int maxCustFilter;
    public int filterIndex;
    public String file;
    public int maxFile;
    public String fileTitle;
    public int maxFileTitle;
    public String initialDir;
    public String title;
    public int flags;
    public short fileOffset;
    public short fileExtension;
    public String defExt;
    public IntPtr custData;
    public IntPtr hook;
    public String templateName;
    public IntPtr reservedPtr;
    public int reservedInt;
    public int flagsEx;
}
public class WindowDll
{
    //链接指定系统函数       打开文件对话框
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
    public static bool GetOFN([In, Out] OpenFileName ofn)
    {
        return GetOpenFileName(ofn);
    }

    //链接指定系统函数        另存为对话框
    [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern bool GetSaveFileName([In, Out] OpenFileName ofn);
    public static bool GetSFN([In, Out] OpenFileName ofn)
    {
        return GetSaveFileName(ofn);
    }
}

2.调用案例

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;

public class OpenFileNameExample : MonoBehaviour
{
    public Button choose;
    private void Awake()
    {
        choose.onClick.AddListener(() => 
        {
            //注意存入路径是否有效
            ChooseFileAndSaveNewPath(Application.streamingAssetsPath + "/图片");
        });
    }
    /// <summary>
    /// 选择文件并存入新的地址
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    public static bool ChooseFileAndSaveNewPath(string path)
    {
        OpenFileName openFileName = new OpenFileName();
        openFileName.structSize = Marshal.SizeOf(openFileName);
        openFileName.filter = "图片文件(*.jpg*.png)\0*.jpg;*.png";
        openFileName.file = new string(new char[1024]);
        openFileName.maxFile = openFileName.file.Length;
        openFileName.fileTitle = new string(new char[64]);
        openFileName.maxFileTitle = openFileName.fileTitle.Length;
        openFileName.initialDir = Application.streamingAssetsPath.Replace('/', '\\');//默认路径
        openFileName.title = "窗口标题";
        openFileName.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;

        if (WindowDll.GetSaveFileName(openFileName))
        {
            string oldPath=openFileName.file.Replace("\\", "/");
            if (oldPath.Substring(oldPath.Length - 4) == ".JPG")
                path += ".JPG";
            else
                path += ".PNG";
            for (int i = oldPath.Length - 1; i > 0; i--)
            {
                if (oldPath[i] == 'G' || oldPath[i] == 'g')
                    break;
                oldPath = oldPath.Remove(i);
            }
            File.Copy(oldPath, path, true);
            return true;
        }
        return false;
    }
}

File类在copy文件时文件地址绝对不能有一点错误!!!在定义结构体时为了尽量满足超长路径,所以将openFileName.file的长度尽可能设定得更长。但是当你选择文件之后返回的地址并不合规,他会将不足设定长度的地址补足位数,补足的位数值为空导致打印出的地址和真实地址一模一样,所以我对其空字符做了删减处理。

3.实例效果如下

unity选择文件,Unity3D,unity,游戏引擎

 文章来源地址https://www.toymoban.com/news/detail-726832.html

到了这里,关于Unity调用系统选择文件功能实现文件的选择及另存为的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity教程||Unity调用安卓方法实现安装apk文件

    记录下,个人之前做一个项目的时候碰到一个需求,安卓端的app中需要做冷更新,这里简单解释下冷更新,其实就是拿当前的app的版本号比对服务器上的版本号,如果服务器上有新版本,就下载新版本的apk,然后安装替换掉整个app,就是冷更新。但是具体实现的时候碰到个问

    2024年02月07日
    浏览(44)
  • 【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现

    在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙原生应用中,我们怎么开发这样的功能呢? 本文会给大家对这个功能点进行讲解,我们采用的是拉起系统组件来进行图片、文件的选择,拉起系统相机进行拍照的这样一种

    2024年02月04日
    浏览(52)
  • 【Java实战】Feign调用文件下载服务接口实现文件下载功能

    最近需要实现Feign调用服务提供者的文件下载接口,进行文件下载功能,这里对功能的实现做一个简单的记录 通过调用服务提供者的文件下载接口,将文件传输的流数据通过 feign.Response 来接收,服务消费者再将数据转化 首先,在项目中引入Feign的依赖。你可以使用Maven进行管

    2024年02月12日
    浏览(75)
  • 【办公软件】C#调用NPOI实现Excel文件的加载、导出功能

    本文将介绍如何使用C#和NPOI库实现Excel文件的读写操作,并通过加载文件和导出文件的按钮进行封装。NPOI是一个强大的.NET库,可以轻松处理Excel文件。我们将学习如何使用NPOI打开现有的Excel文件、读取数据,并将数据写入到Excel文件中。 在开始之前,请确保已安装以下环境:

    2024年02月06日
    浏览(50)
  • Unity功能实现_打开Window的文件/文件夹

    🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎目标:打开Window的文件/文件夹 ☀️核心代码 GetOpenFileName和GetSaveFileName都是Windows API中的函数,它们都定义在comdlg32.dll中。这两个函数都是用来显示文件打开或保存对话框的。

    2024年02月02日
    浏览(60)
  • Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载

    业务需求:从数据库查询多个list集合信息封装excel,每个excel都有2个sheet页,填充不同的信息,最后将所有excel打包成zip文件,以流的形式返回给客户端,供客户端另存为窗口下载。 只发出一次请求 每个excel表中到数据记录不能超过2条 excel文件或者zip包不会上传服务器,而是

    2024年02月06日
    浏览(49)
  • Linux 系统调用IO口,利用光标偏移实现文件复制

    用系统调用IO函数实现从一个文件读取最后2KB数据并复制到另一个文件中,源文件以只读方式打开,目标文件以只写的方式打开,若目标文件不存在,可以创建并设置初始值为0664,写出相应代码,要对出错情况有一定的处理,并能够让用户自行输入要复制的文件名。 IO口即指

    2024年02月08日
    浏览(40)
  • Python使用Pyside2和Qt Designer实现接口数据查询mainwindow-tablewidget和EXCEL导出功能,并生成EXE可执行文件直接调用.ui文件和生成py调用都有-初学

    通过Pyside2库调用QT Designer的UI文件,直接调用.ui文件和将.ui文件转换为.pt文件进行调用,调用测试成功生成exe文件 可以直接在终端调用 参考:https://blog.csdn.net/qq_44940689/article/details/123913832 直接在终端中运行 -F 只会生成单独的一个exe文件 -w 是双击exe不会打开黑色窗口,可以试

    2024年02月04日
    浏览(49)
  • Unity3D实现背包系统、物品的拖拽、拾取物品功能

    要在Unity中实现背包系统,你可以创建一个脚本来管理库存和物品。 首先,在Unity中创建一个名为“InventoryManager”的C#脚本。在这个脚本中,你可以创建一个将存储在背包中的物品列表。

    2024年02月16日
    浏览(43)
  • 【APUE】文件系统 — 类 du 命令功能实现

    目录 一、du命令解析 二、类 du 命令实现 2.1 如果 path 为普通文件 2.2 如果 path 为目录  补充  Summarize disk usage of the set of FILEs, recursively for directories.   du 命令用于输出文件所占用的磁盘空间 默认情况下,它会输出当前 目录下(包括该目录的所有子目录下)的所有文件的大小

    2024年02月07日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包