OpenInFileBrowser

From Unify Community Wiki
Jump to: navigation, search

Use `OpenInFileBrowser.Open()` for a cross-platform way of opening any file/folder. This gives your code a "Reveal in Finder" or "Open in Explorer" functionality. Can be useful for editor scripts but probably can be used for non-editor scripts for desktop builds also (for in-game mod editors perhaps?).

If you specify a path with a file at the end, the code will open your file browser with that file selected/highlighted. If you specify a folder instead, it will open the contents of that folder with nothing in it selected.

I place this code in the public domain. Feel free to use it!

public static class OpenInFileBrowser
{
	public static bool IsInMacOS
	{
		get
		{
			return SystemInfo.operatingSystem.IndexOf("Mac OS") != -1;
		}
	}
 
	public static bool IsInWinOS
	{
		get
		{
			return SystemInfo.operatingSystem.IndexOf("Windows") != -1;
		}
	}
 
	[MenuItem("Window/Test OpenInFileBrowser")]
	public static void Test()
	{
		//string path = "/Users/Ferds/Unity Projects/BuildReportTool/BuildReportUnityProject/Assets/BuildReportDebug";
		//string path = "/Users/Ferds/Unity Projects/BuildReportTool/BuildReportUnityProject/Assets/BuildReportDebug/EditorMorel.log.txt";
		//string path = "/Users/Ferds/UnityBuildReports/";
		string path = "/Users/Ferds/UnityBuildReports/test4.xml";
 
		Open(path);
	}
 
 
	public static void OpenInMac(string path)
	{
		bool openInsidesOfFolder = false;
 
		// try mac
		string macPath = path.Replace("\\", "/"); // mac finder doesn't like backward slashes
 
		if (Directory.Exists(macPath)) // if path requested is a folder, automatically open insides of that folder
		{
			openInsidesOfFolder = true;
		}
 
		//Debug.Log("macPath: " + macPath);
		//Debug.Log("openInsidesOfFolder: " + openInsidesOfFolder);
 
		if (!macPath.StartsWith("\""))
		{
			macPath = "\"" + macPath;
		}
		if (!macPath.EndsWith("\""))
		{
			macPath = macPath + "\"";
		}
		string arguments = (openInsidesOfFolder ? "" : "-R ") + macPath;
		//Debug.Log("arguments: " + arguments);
		try
		{
			System.Diagnostics.Process.Start("open", arguments);
		}
		catch(System.ComponentModel.Win32Exception e)
		{
			// tried to open mac finder in windows
			// just silently skip error
			// we currently have no platform define for the current OS we are in, so we resort to this
			e.HelpLink = ""; // do anything with this variable to silence warning about not using it
		}
	}
 
	public static void OpenInWin(string path)
	{
		bool openInsidesOfFolder = false;
 
		// try windows
		string winPath = path.Replace("/", "\\"); // windows explorer doesn't like forward slashes
 
		if (Directory.Exists(winPath)) // if path requested is a folder, automatically open insides of that folder
		{
			openInsidesOfFolder = true;
		}
		try
		{
			System.Diagnostics.Process.Start("explorer.exe", (openInsidesOfFolder ? "/root," : "/select,") + winPath);
		}
		catch(System.ComponentModel.Win32Exception e)
		{
			// tried to open win explorer in mac
			// just silently skip error
			// we currently have no platform define for the current OS we are in, so we resort to this
			e.HelpLink = ""; // do anything with this variable to silence warning about not using it
		}
	}
 
	public static void Open(string path)
	{
		if (IsInWinOS)
		{
			OpenInWinFileBrowser(path);
		}
		else if (IsInMacOS)
		{
			OpenInMacFileBrowser(path);
		}
		else // couldn't determine OS
		{
			OpenInWinFileBrowser(path);
			OpenInMacFileBrowser(path);
		}
	}
}
Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox