Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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));
                            }
                        }
                    }
                }
            }
        }
Esempio n. 3
0
 /// <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;
 }
Esempio n. 4
0
 /// <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;
 }
Esempio n. 5
0
 /// <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);
 }
Esempio n. 6
0
 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;
 }
Esempio n. 7
0
 /// <summary>nameはディレクトリ名か?</summary>
 public static bool IsDir(string name)
 {
     using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy))
         return(Directory.Exists(name));
 }
Esempio n. 8
0
        /// <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;
        }
Esempio n. 9
0
		/// <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);
						}
					}
				}
			}
		}
Esempio n. 10
0
		/// <summary>nameはディレクトリ名か?</summary>
		public static bool IsDir(string name)
		{
			using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(FileSys.DirectoryPolicy))
				return Directory.Exists(name);
		}