OpenInFileBrowser

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Added code to determine OS)
Line 1: Line 1:
 
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?).
 
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?).
 
Right now there are no platform defines for determining which OS you are currently in (there are only platform defines for which OS your build targets). So the code attempts to launch both Windows Explorer and Mac Finder, and simply ignores any error.
 
  
 
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.
 
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.
Line 10: Line 8:
 
public static class OpenInFileBrowser
 
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")]
 
[MenuItem("Window/Test OpenInFileBrowser")]
 
public static void Test()
 
public static void Test()
Line 86: Line 100:
 
public static void Open(string path)
 
public static void Open(string path)
 
{
 
{
OpenInWin(path);
+
if (IsInWinOS)
OpenInMac(path);
+
{
 +
OpenInWinFileBrowser(path);
 +
}
 +
else if (IsInMacOS)
 +
{
 +
OpenInMacFileBrowser(path);
 +
}
 +
else // couldn't determine OS
 +
{
 +
OpenInWinFileBrowser(path);
 +
OpenInMacFileBrowser(path);
 +
}
 
}
 
}
 
}
 
}
  
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 08:28, 10 May 2013

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