{{htmlmetatags>metatag-robots=()
metatag-keywords=(C#,씨썁,C# 코드조각,코드 조각)
metatag-description=(C# 코드조각)
}}
C# 코드 모음
{{tag>코드조각모음 코드_조각}}
====== 빈도 높은 ======
===== MessageBox =====
[[http://msdn.microsoft.com/ko-kr/library/system.windows.forms.messagebox.aspx|MSDN/MessageBox]]
MessageBox.Show( messageString, CaptionString );
===== Assert =====
using System.Diagnostics;
Debug.Assert( <조건문> );
===== 가변인자 =====
string s;
s = System.String.Format( "{0} times {1} = {2}", i, j, (i * j) );
===== String =====
==== string to byte 변환 ====
string _dataStr = @"한글과 영문을 섞은 Normal string";
// StringBuilder에 집어 넣은 다음
StringBuilder builder = new StringBuilder( _dataStr );
// 원하는 캐릭터를 변경하고
builder[0] = (char)((int)builder[0] + 4);
// 다시 스트링에 집어 넣는다.
_dataStr = builder.ToString();
==== 스트링 조합 ====
[[http://msdn.microsoft.com/en-us/library/txafckwd.aspx|Composite Formatting]]
조합 스트링의 기본 사용은,
string output = string.Format("{0}{1:D}{2}", "{", value, "}");
나머지 상세 내용은 링크 참조.
====== String : Format ======
- 합성 형식 지정: http://msdn.microsoft.com/ko-kr/library/txafckwd.aspx
- 표준 숫자 서식 문자열: http://msdn.microsoft.com/ko-kr/library/dwhawy9k.aspx
- 사용자 지정 숫자 서식 문자열: http://msdn.microsoft.com/ko-kr/library/0c899ak8.aspx
===== ToString()에서 소수점 자리수 조정 =====
ToString()만으로 소수점 자리수를 잘라서 표시하기.
float a1 = 0.12345f;
string _msg1 = a1.ToString("n0"); // 0
string _msg2 = a1.ToString("n3"); // 0.123
===== 서식 문자열 기본 사용 =====
string output = string.Format("{0}, {1,3:D}", 1, 2 );
{0} : 첫번째 파라미터를 그대로 반영한다.
{1,3:D} : 두번째 파라미터를 받는다.
* ',3' 이면 ' ' 공백으로 3자리를 사용한다.
* ':D' 정수 포맷이라는 지시어.
string output = string.Format("{0:D3}", 21 );
// 결과: 021
* {0 : 포맷 파라미터 인덱스.
* : : 파라미터 연장
* D3 : D는 정수입력이라는 뜻이고, 3은 자리수가 3자리. 빈자리에는 0을 채운다.
===== 포맷 문자열 형식 변환 =====
( "{0}" , sampleStr ) // 보통은 그냥 알아서 출력 되지만,
( "{0:X}" , 123 ) // 16진수로 출력
( "{0:C}" , 123 ) // $123 처럼 돈 표시가 붙어서 출력
( "{0:F}" , 1234.5678 ) // 1234.5678
( "{0:F2}" , 34.5678 ) // 1234.56 뒷 두자리만
( "{0:D4}" , 12 ) // 0012
( "{0:hh}" , DateTime.Now ) // 시간 표시
( "{0:mm}" , DateTime.Now ) // 분 표시
===== str to int =====
자주 잊어버리는데.. ( [[http://msdn.microsoft.com/ko-kr/library/bb397679.aspx|방법: 문자열을 숫자로 변환(C# 프로그래밍 가이드)]]
using System; // 네임스페이스를 포함시키려면
string str_num = "22";
int nv = System.Convert.ToInt32(str_num);
// or
nv = Int32.Parse(str_num);
===== char to int =====
string numberStr = "256";
char[] num_char_ar = numberStr.ToCharArray();
for( int i = 0; i < num_char_ar.Length; ++i )
{
// 리턴값 형식이 double이라 강제 형변환
int nv = (int)System.Char.GetNumericValue(num_char_ar[i]);
}
====== Directory IO ======
===== LINK =====
* [[http://msdn.microsoft.com/en-us/library/System.IO.Directory_methods.aspx|Directory Methods]]
* [[http://msdn.microsoft.com/en-us/library/54a0at6s.aspx|Directory.CreateDirectory]]
* [[http://msdn.microsoft.com/en-us/library/system.io.directory.exists.aspx|Directory.Exists]]
===== Example =====
====디렉토리 있는지 검사====
using System.IO;
// log 폴더가 없으면 만든다.
if(!Directory.Exists("log")) {
Directory.CreateDirectory("log");
}
====특정 폴더의 파일과 서브 폴더 이름을 모두 읽어 오는 간단한 예제====
using System.IO; // Directory, File 에 대해서
void readDirectory(string targetDir_)
{
string[] files = Directory.GetFiles(targetDir_);
foreach(string _filename in files)
readFiles(_filename);
string[] subdirs = Directory.GetDirectories(targetDir_);
foreach(string _subdir_path in subdirs)
readDirectory(_subdir_path);
}
void readFiles(string filePath_)
{
Console.WriteLine("found file: {0}", filePath_);
}
조건을 붙여 필요한 파일이나 폴더 목록을 받아오는 방법 - 우선 링크만
* [[https://docs.microsoft.com/ko-kr/dotnet/standard/io/how-to-enumerate-directories-and-files|방법: 디렉터리 및 파일 열거]]
====== File IO ======
* [[http://msdn.microsoft.com/en-us/library/ms404278.aspx|Common IO Task example]]
===== File Exist =====
using System;
using System.IO;
class Test
{
public static void Main()
{
string sourceFile = @"c:\tests\Test.txt";
string newFile = @"c:\tests\Test2.txt";
if (File.Exists(sourceFile)) {
File.Copy(sourceFile, newFile);
}
else {
Console.WriteLine("Source file does not exist.");
}
}
}
===== Path의 사용 =====
using System.IO;
* [[http://msdn.microsoft.com/ko-kr/library/system.io.path(v=vs.110).aspx|System.IO.Path]]
String samplePath = @"C:\z\z.exe";
// return "Z"
String targetProcName = Path.GetFileNameWithoutExtension( samplePath ).ToUpper();
// return "C:\z"
Path.GetDirectoryName( samplePath );
msdn 봐도 되지만 여기서 찾고 끝내는 함수.
| GetDirectoryName(String) | 경로를 리턴 |
| GetExtension(String) | 확장자만 리턴 |
| GetFileName(String) | 경로명에서 이름과 확장자를 리턴 |
| GetFileNameWithoutExtension(String) | 파일 이름만 리턴 |
===== Directory 의 사용 =====
String samplePath = @"C:\z";
if( Directory.Exists( samplePath ) )
Directory.SetCurrentDirectory( samplePath );
===== 특수한 폴더 경로 =====
* Environment.GetFolderPath() : 특수폴더 값을 파라미터로 전달
* Environment.SpecialFolder. : 에 입력하려는 특수 폴더 상수 값
* [[http://msdn.microsoft.com/ko-kr/library/system.environment.specialfolder.aspx|Environment.SpecialFolder 도움말]]
{
Console.WriteLine( "GetFolderPath : {0}",
Environment.GetFolderPath( Environment.SpecialFolder.System ) );
}
====== Text IO ======
* [[http://msdn.microsoft.com/en-us/library/6ka1wd3w.aspx|HowTo: Write Text to File]]
===== File.AppendText Method로 스트링 Append =====
[[http://msdn.microsoft.com/en-us/library/system.io.file.appendtext.aspx|File.AppendText Method]]
파일을 만들고, 쓰기까지 좋은 예제
using System;
using System.IO;
class Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";
// This text is added only once to the file.
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
// This text is always added, making the file longer over time
// if it is not deleted.
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("This");
sw.WriteLine("is Extra");
sw.WriteLine("Text");
}
// Open the file to read from.
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
}
}
====== Binary IO ======
====== Control ======
===== TextBox 에서 멀티라인 =====
// 총 몇줄인지 확인하기 위해서 쓴 코드
char[] _zsp = new char[] { '\r', '\n' };
String[] logs = mLogView.Text.Split( _zsp );
if( logs.Length > maxLogLineCount )
mLogView.ResetText();
// Environment.NewLine를 붙여주면 줄 바꾸기가 된다.
mLogView.AppendText( newLog + Environment.NewLine );
===== 버튼상태조정 =====
SampleButton.Enabled = false; // true면 활성화
====== System ======
===== 프로세스 체크 =====
// 예제 프로그램에서 프로세스 이름을 구한다.
// Path를 사용해서 파일이름을 구한다.
String targetProcName = Path.GetFileNameWithoutExtension( mProcPath.Text ).ToUpper();
// 1) 전체 프로세스 리스트를 구한다.
Process[] processlist = Process.GetProcesses();
// 2) 프로세스 리스트를 순행하면서
foreach(Process tmpproc in processlist)
{
// 3) 각 프로세스의 이름을 구해서
String upperProcName = tmpproc.ProcessName.ToUpper();
// 4) 내가 찾는 프로세스인지 확인
if( upperProcName == targetProcName )
{
// 5) 프로세스의 패스를 구해서 임시 저장 (원래프로그램의 조각코드)
mProcPath.Text = tmpproc.MainModule.FileName;
return true;
}
}
return false;
===== 프로세스실행 =====
public bool StartProcess()
{
// default value : @"C:\z\z.exe";
String dcServerFileName = mProcPath.Text;
String dcServerPath = Path.GetDirectoryName( dcServerFileName );
try
{
if( Directory.Exists( dcServerPath ) )
Directory.SetCurrentDirectory( dcServerPath );
Process dcProc = Process.Start( dcServerFileName );
if( null != dcProc )
{
return true;
}
}
catch( Win32Exception w )
{
// i dont know about this code : I just copied.
Console.WriteLine( w.Message );
Console.WriteLine( w.ErrorCode.ToString() );
Console.WriteLine( w.NativeErrorCode.ToString() );
Console.WriteLine( w.StackTrace );
Console.WriteLine( w.Source );
Exception e = w.GetBaseException();
Console.WriteLine( e.Message );
}
return false;
}
====== 압축 ======
**System.IO.Compression** 과 **FileStream**/**MemoryStream**을 사용해서 파일 또는 메모리 압축/해제 하는 예제.
파일에 대한 예제는 MSDN에 있으니 그쪽을 보자. [[http://msdn.microsoft.com/ko-kr/library/system.io.compression.deflatestream.aspx|DeflateStream]]
using System.IO.Compression;
압축/압축풀기 코드
* 참고한 URL [[http://stackoverflow.com/questions/4158942/deflatestream-not-decompressing-data-the-first-time|DeflateStream not decompressing data (the first time)]]
public static string Base64Compress( string data )
{
using( var ms = new MemoryStream() )
{
using( var ds = new DeflateStream( ms, CompressionMode.Compress ) )
{
byte[] b = Encoding.UTF8.GetBytes( data );
ds.Write( b, 0, b.Length );
}
return Convert.ToBase64String( ms.ToArray() );
}
}
public static string Decompress( Byte[] bytes )
{
using( var uncompressed = new MemoryStream() )
using( var compressed = new MemoryStream( bytes ) )
using( var ds = new DeflateStream( compressed, CompressionMode.Decompress ) )
{
ds.CopyTo( uncompressed );
return Encoding.UTF8.GetString( uncompressed.ToArray() );
}
}
public static void TEST_FUNC()
{
string _beforeComp = @"한글이나 영문을 섞어서, test string..";
string _midBuffer = Base64Compress( _beforeComp );
string _resultStr = Decompress( Convert.FromBase64String(_midBuffer) );
}
====== 랜덤 ======
* [[http://msdn.microsoft.com/en-us/library/system.random.aspx|System.Random]]
// 0~n사이의 랜덤 얻기
Random _rnd = new Random();
int _idx = _rnd.Next( 0, 100 ); // 0 ~ 100 사이의 랜덤 수 얻기
====== 시간 (TimeDate) ======
로그 출력용 시간 정보 얻기
using system;
DateTime saveNow = DateTime.Now;
string dtString = saveNow.ToString(@"yy/MM/dd hh:mm:ss.ffff");
string _finalStr = String.Format("[{0}] {1}", dtString, "무언가 스트링");
====== Debug ======
디버그용 메시지 출력
using System.Diagnostics;
Debug.WriteLine("디버그 메시지 출력");
====== 그외 ======
===== 실행 중인 프로그램 이름 얻기 =====
using System.Diagnostics;
// Returns the filename with extension (e.g. MyApp.exe).
System.AppDomain.CurrentDomain.FriendlyName
// Returns the filename without extension (e.g. MyApp).
// (not work)System.Diagnostics.Process.GetCurrentProcess().ProcessName
System.Reflection.Assembly.GetEntryAssembly().Location
// Returns the full path and filename (e.g. C:\Examples\Processes\MyApp.exe).
// You could then pass this into System.IO.Path.GetFileName() or
// System.IO.Path.GetFileNameWithoutExtension() to achieve the same results as the above.
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
===== 배열 =====
2차 배열을 사용할때, 각 N 차 배열의 개수를 얻고 싶을때
//
int int_array[,] = new int[3,3]; // 3x3 배열을 만든 다음,
// 0번째 배열 길이를 얻고 싶으면
int_array.GetLength( 0 ); // 요 함수로 얻는다.