Back to Top

プログラムの覚書

Category: C#

.NET C#

C# ファイルパスからディレクトリ名 (フォルダ名) を取得する

C#にてファイルパスからディレクトリ名 (フォルダ名) を取得するにはいくつか方法があります。その方法を説明します。

以下はすべて、親ディレクトリ名 (フォルダ名) を取得する方法の例です。

System.IO.Pathを使用

string Directory = System.IO.Path.GetDirectoryName(@"C:\Hoge\sub\File.txt");

 

System.IO.DirectoryInfoを使用

System.IO.DirectoryInfo hDirInfo = System.IO.Directory.GetParent(@"C:\Hoge\sub\Foo.txt");	
string Directory = hDirInfo.FullName;

 

System.IO.FileInfoを使用

System.IO.FileInfo cFileInfo = new System.IO.FileInfo(@"C:\Hoge\sub\Foo.txt");
string Directory = cFileInfo.DirectoryName;

 

System.IO.DirectoryInfoを使用

System.IO.DirectoryInfo hDirInfoBar = new System.IO.DirectoryInfo(@"C:\Hoge\sub\Foo.txt");
string Directory = hDirInfoBar.Parent.FullName;

 

Posted in C# | Leave a reply

C# メモリーコピー(Marshalクラス)

C#でもC言語のmemcpy()ようにメモリーコピーをしたい場合があります。その方法の説明をします。

Marshal クラス

名前空間: System.Runtime.InteropServices MSDN アンマネージ コードを扱うときに使用できるさまざまなメソッドを提供します。

アンマネージ メモリの割り当て、アンマネージ メモリ ブロックのコピー、マネージ型からアンマネージ型への変換などができます。

★構造体サンプル

struct Hoge {
  public int a;
  public int b;
  public int c;
}

 

メモリに構造体のデータをコピーする方法

Hoge obj = new Hoge();
int size = Marshal.SizeOf(obj);
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(obj, ptr, false);

 

Byte配列にデータをコピーする方法

Hoge obj = new Hoge();
int size = Marshal.SizeOf(obj);
byte[] bytes = new byte[size];
GCHandle gch = GCHandle.Alloc(bytes, GCHandleType.Pinned);
Marshal.StructureToPtr(obj, gch.AddrOfPinnedObject(), false);
gch.Free();

 

Posted in C# | Leave a reply