/// <summary> /// dllファイルを事前に読み込むことで、dllからdllの間接的な読み込みを防ぐ。 /// (SDLのsmpeg.dllなどはこれをしないと配置フォルダを変更できないので) /// </summary> private static YanesdkResult LoadLibrarySafe(string path, string filename) { YanesdkResult result; if (!System.Platform.IsWindows) { // linuxの場合どうやっていいのかは知らん(`ω´) // 必要があるならなんとかしてくれ(´ω`) result = YanesdkResult.HappenSomeError; } else { string dllPathName = FileSys.ConcatPath(path, filename); // いったんCurrent Directoryを変更しないと // smpeg.dllのようにDllMainでおかしなことをしているdllは読み込めない。 // dllは実行ファイル相対で配置されると仮定できる。 // CurrentDirectoryを一時的に変更する { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(DllManager.DirectoryPolicy)) { // そのdllファイルが存在するのか事前に調べておく。 if (FileSys.IsExist(dllPathName)) { IntPtr handle = LoadLibrary_(dllPathName); if (handle == IntPtr.Zero) { // Console.WriteLine("dllの読み込みに失敗 : " + dllFileName ); // Debug.Fail(file + " の読み込みに失敗: " + // (new global::System.ComponentModel.Win32Exception()).Message); result = YanesdkResult.HappenSomeError; // なんか致命的なエラー(´ω`) } else { result = YanesdkResult.NoError; } } else { result = YanesdkResult.FileNotFound; } } } } return(result); }
/// <summary> /// ディレクトリ内のファイルを列挙するiterator。 /// </summary> public virtual IEnumerator GetEnumerator() { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) { if (dirname == null || dirname.Length == 0) { dirname = "."; } string[] items; try { items = Directory.GetFileSystemEntries(dirname); } catch { yield break; } foreach (string item in items) { if (IsFile(item)) { yield return(Strip(item)); } else { if (!FileOnly) { yield return(Strip(item)); } if (SubDir) { string[] items2; try { items2 = Directory.GetFileSystemEntries(item); } catch { yield break; } foreach (string item2 in items2) { yield return(Strip(item2)); } } } } } }
/// <summary> /// ファイルを書き込む(例外は投げない) /// </summary> /// <remarks> /// /// file.readが例外を投げてうっとおしいときに使います。 /// 読み込みに失敗すると非0(YanesdkResult.no_error以外)が返ります。 /// /// </remarks> /// <param name="filename"></param> /// <param name="rdata"></param> /// <returns></returns> public static YanesdkResult WriteSimple(string filename , byte[] rdata) { try { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) using (FileStream fs = File.OpenWrite(filename)) { fs.Write(rdata , 0 , rdata.Length); } } catch ( Exception ) { return YanesdkResult.FileWriteError; } return YanesdkResult.NoError; }
/// <summary> /// ファイルからデータを読み込む /// </summary> /// <returns></returns> public static Stream OpenRead(string filename) { Stream stream; try { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) stream = File.OpenRead(filename); } catch { // try // { // stream = resourceManager.GetStream(filename); // // stream = null; // } // catch // { stream = null; // } } return stream; }
/// <summary> /// ファイルの存在確認 /// </summary> /// <remarks> /// 指定したファイル名のファイルが実在するかどうかを調べる /// setPathで指定されているpathは考慮に入れない。 /// </remarks> /// <param name="filename"></param> /// <returns></returns> public static bool IsExist(string filename) { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) return File.Exists(filename); }
public Stream Read(string filename) { Stream stream; try { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) stream = File.OpenRead(filename); } catch { if ( reader != null ) { stream = reader.Read(filename); if ( stream != null ) return stream; } return null; } return stream; }
/// <summary>nameはディレクトリ名か?</summary> public static bool IsDir(string name) { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) return(Directory.Exists(name)); }
/// <summary> /// dllファイルを事前に読み込むことで、dllからdllの間接的な読み込みを防ぐ。 /// (SDLのsmpeg.dllなどはこれをしないと配置フォルダを変更できないので) /// </summary> private static YanesdkResult LoadLibrarySafe(string path,string filename) { YanesdkResult result; if (!System.Platform.IsWindows) { // linuxの場合どうやっていいのかは知らん(`ω´) // 必要があるならなんとかしてくれ(´ω`) result = YanesdkResult.HappenSomeError; } else { string dllPathName = FileSys.ConcatPath(path, filename); // いったんCurrent Directoryを変更しないと // smpeg.dllのようにDllMainでおかしなことをしているdllは読み込めない。 // dllは実行ファイル相対で配置されると仮定できる。 // CurrentDirectoryを一時的に変更する { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(DllManager.DirectoryPolicy)) { // そのdllファイルが存在するのか事前に調べておく。 if (FileSys.IsExist(dllPathName)) { IntPtr handle = LoadLibrary_(dllPathName); if (handle == IntPtr.Zero) { // Console.WriteLine("dllの読み込みに失敗 : " + dllFileName ); // Debug.Fail(file + " の読み込みに失敗: " + // (new global::System.ComponentModel.Win32Exception()).Message); result = YanesdkResult.HappenSomeError; // なんか致命的なエラー(´ω`) } else result = YanesdkResult.NoError; } else result = YanesdkResult.FileNotFound; } } } return result; }
/// <summary> /// ディレクトリ内のファイルを列挙するiterator。 /// </summary> public virtual IEnumerator GetEnumerator() { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) { if (dirname == null || dirname.Length == 0) dirname = "."; string[] items; try { items = Directory.GetFileSystemEntries(dirname); } catch { yield break; } foreach (string item in items) { if (IsFile(item)) yield return Strip(item); else { if (!FileOnly) yield return Strip(item); if (SubDir) { string[] items2; try { items2 = Directory.GetFileSystemEntries(item); } catch { yield break; } foreach (string item2 in items2) yield return Strip(item2); } } } } }
/// <summary>nameはディレクトリ名か?</summary> public static bool IsDir(string name) { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy)) return Directory.Exists(name); }