using System;
using System.IO; // 파일 및 디렉터리 작업을 위한 네임스페이스
// System.IO 네임스페이스의 File 클래스와 Directory 클래스를 사용하여,
// 파일 또는 디렉터리를 생성하거나 마지막 쓰기 시간을 변경하는 프로그램.
// (인수로 입력받은 경로에 새 파일이나 디렉터리를 만듭니다.
// 만약 사용자가 입력한 경로에 이미 만들어져 있는 파일이나 디렉터리가 존재한다면,
// 해당 파일이나 디렉터리의 최종 수정 시간만 갱신합니다.)
namespace Touch
{
class MainApp
{
static void OnWrongPathType(string type) // 잘못된 경로 타입을 입력받았을 때 호출되는 메서드
{
Console.WriteLine($"{type} is wrong type"); // 오류 메시지 출력
return; // 메서드 종료
}
static void Main(string[] args)
{
if (args.Length == 0) // 명령줄 인수가 없으면
{
Console.WriteLine( // 사용법 출력
"Usage : Touch.exe <Path> [Type:File/Directory]");
return; // 프로그램 종료
}
string path = args[0]; // 첫 번째 명령줄 인수를 경로로 저장
string type = "File"; // 기본 타입을 File로 설정
if (args.Length > 1) // 명령줄 인수가 2개 이상이면
type = args[1]; // 두 번째 명령줄 인수를 타입으로 저장
if (File.Exists(path) || Directory.Exists(path)) // 경로가 이미 존재하고
{
if (type == "File") // 타입이 File이면
File.SetLastWriteTime(path, DateTime.Now); // 파일의 마지막 쓰기 시간을 현재 시간으로 변경
else if (type == "Directory") // 타입이 Directory이면
Directory.SetLastWriteTime(path, DateTime.Now); // 디렉터리의 마지막 쓰기 시간을 현재 시간으로 변경
else // 타입이 File 또는 Directory가 아니면
{
OnWrongPathType(path); // OnWrongPathType 메서드 호출
return; // 프로그램 종료
}
Console.WriteLine($"Updated {path} {type}"); // 업데이트 메시지 출력
}
else // 경로가 존재하지 않고
{
if (type == "File") // 타입이 File이면
File.Create(path).Close(); // 파일 생성
else if (type == "Directory") // 타입이 Directory이면
Directory.CreateDirectory(path); // 디렉터리 생성
else // 타입이 File 또는 Directory가 아니면
{
OnWrongPathType(path); // OnWrongPathType 메서드 호출
return; // 프로그램 종료
}
Console.WriteLine($"Created {path} {type}"); // 생성 메시지 출력
}
}
}
}
코드 설명
using System;
using System.IO; // 파일 및 디렉터리 작업을 위한 네임스페이스
namespace Touch
{
class MainApp
{
static void OnWrongPathType(string type) // 잘못된 경로 타입을 입력받았을 때 호출되는 메서드
{
Console.WriteLine($"{type} is wrong type"); // 오류 메시지 출력
return; // 메서드 종료
}
static void Main(string[] args)
{
if (args.Length == 0) // 명령줄 인수가 없으면
{
Console.WriteLine( // 사용법 출력
"Usage : Touch.exe <Path> [Type:File/Directory]");
return; // 프로그램 종료
}
string path = args[0]; // 첫 번째 명령줄 인수를 경로로 저장
string type = "File"; // 기본 타입을 File로 설정
if (args.Length > 1) // 명령줄 인수가 2개 이상이면
type = args[1]; // 두 번째 명령줄 인수를 타입으로 저장
if (File.Exists(path) || Directory.Exists(path)) // 경로가 이미 존재하면
{
if (type == "File") // 타입이 File이면
File.SetLastWriteTime(path, DateTime.Now); // 파일의 마지막 쓰기 시간을 현재 시간으로 변경
else if (type == "Directory") // 타입이 Directory이면
Directory.SetLastWriteTime(path, DateTime.Now); // 디렉터리의 마지막 쓰기 시간을 현재 시간으로 변경
else // 타입이 File 또는 Directory가 아니면
{
OnWrongPathType(path); // OnWrongPathType 메서드 호출
return; // 프로그램 종료
}
Console.WriteLine($"Updated {path} {type}"); // 업데이트 메시지 출력
}
else // 경로가 존재하지 않으면
{
if (type == "File") // 타입이 File이면
File.Create(path).Close(); // 파일 생성
else if (type == "Directory") // 타입이 Directory이면
Directory.CreateDirectory(path); // 디렉터리 생성
else // 타입이 File 또는 Directory가 아니면
{
OnWrongPathType(path); // OnWrongPathType 메서드 호출
return; // 프로그램 종료
}
Console.WriteLine($"Created {path} {type}"); // 생성 메시지 출력
}
}
}
}
코드 설명
이 C# 코드는 System.IO 네임스페이스의 File 클래스와 Directory 클래스를 사용하여 파일 또는 디렉터리를 생성하거나 마지막 쓰기 시간을 변경하는 프로그램입니다.
OnWrongPathType(string type): 잘못된 경로 타입을 입력받았을 때 호출되는 메서드입니다. 오류 메시지를 출력하고 메서드를 종료합니다.Main 메서드:if (args.Length == 0): 명령줄 인수가 없으면 사용법을 출력하고 프로그램을 종료합니다.string path = args[0];: 첫 번째 명령줄 인수를 경로로 저장합니다.string type = "File";: 기본 타입을 "File"로 설정합니다.if (args.Length > 1) type = args[1];: 명령줄 인수가 2개 이상이면 두 번째 인수를 타입으로 저장합니다.if (File.Exists(path) || Directory.Exists(path)): 경로가 이미 존재하면 마지막 쓰기 시간을 변경합니다.if (type == "File") File.SetLastWriteTime(path, DateTime.Now);: 타입이 "File"이면 파일의 마지막 쓰기 시간을 현재 시간으로 변경합니다.else if (type == "Directory") Directory.SetLastWriteTime(path, DateTime.Now);: 타입이 "Directory"이면 디렉터리의 마지막 쓰기 시간을 현재 시간으로 변경합니다.else: 타입이 "File" 또는 "Directory"가 아니면 OnWrongPathType 메서드를 호출하고 프로그램을 종료합니다.else: 경로가 존재하지 않으면 파일 또는 디렉터리를 생성합니다.if (type == "File") File.Create(path).Close();: 타입이 "File"이면 파일을 생성합니다.else if (type == "Directory") Directory.CreateDirectory(path);: 타입이 "Directory"이면 디렉터리를 생성합니다.else: 타입이 "File" 또는 "Directory"가 아니면 OnWrongPathType 메서드를 호출하고 프로그램을 종료합니다.추가 설명
File.SetLastWriteTime() 메서드는 파일의 마지막 쓰기 시간을 변경합니다.Directory.SetLastWriteTime() 메서드는 디렉터리의 마지막 쓰기 시간을 변경합니다.File.Create() 메서드는 파일을 생성합니다.Directory.CreateDirectory() 메서드는 디렉터리를 생성합니다.이 코드는 파일 및 디렉터리 작업을 수행하는 방법을 보여줍니다.
명령줄 인수? 명령줄 인수를 입력하는 방법?
명령줄 인수는 프로그램을 실행할 때 프로그램에 전달하는 추가적인 정보입니다.
마치 음식을 주문할 때, "햄버거 하나 주세요" 뿐만 아니라 "세트로 주세요", "콜라 대신 사이다로 주세요" 와 같은 추가 요청을 하는 것과 같습니다.
명령줄 인수를 사용하면 프로그램의 실행 방식을 변경하거나, 프로그램에 필요한 정보를 제공할 수 있습니다.
명령줄 인수 입력 방법
명령 프롬프트 또는 터미널에서 프로그램을 실행할 때, 프로그램 이름 뒤에 공백으로 구분하여 명령줄 인수를 입력합니다.
프로그램이름 인수1 인수2 인수3 ...
예를 들어, myProgram.exe라는 프로그램을 실행하면서 "hello"와 "world"라는 두 개의 명령줄 인수를 전달하려면 다음과 같이 입력합니다.
myProgram.exe hello world
C# 프로그램에서는 Main 메서드의 string[] args 매개변수를 통해 명령줄 인수에 접근할 수 있습니다. args 배열은 명령줄 인수를 문자열 형태로 저장합니다.
static void Main(string[] args)
{
if (args.Length > 0)
{
Console.WriteLine("명령줄 인수:");
foreach (string arg in args)
{
Console.WriteLine(arg);
}
}
}
이 코드는 명령줄 인수가 있으면 args 배열의 각 요소를 출력합니다.
명령줄 인수의 활용
명령줄 인수를 사용하면 프로그램을 더욱 유연하게 사용할 수 있습니다.
비주얼 스투디오에서 컨트롤+F5 눌러서 뜨는 창은 콘솔창인데, 콘솔 창에 입력하는 걸로 명령줄 인수가 입력되는건 아닌것인가? 콘솔창에 입력하는 건 런타임에 일어나는 일인가?
그렇다. 컨트롤+F5로 뜨는 콘솔 창에 입력하는 것은 명령줄 인수가 아니고, 프로그램 실행 중에 사용자로부터 입력을 받는 것입니다. 즉, 런타임에 발생하는 일이다.
명령줄 인수는 프로그램을 실행할 때 전달하는 값이고, 콘솔 창에 입력하는 것은 프로그램이 실행된 후에 입력하는 값입니다.
명령줄 인수는 프로그램의 시작 시점에 한 번만 전달되지만, 콘솔 창에는 프로그램 실행 중에 여러 번 입력할 수 있습니다.
명령줄 인수는 Main 메서드의 string[] args 매개변수를 통해 접근할 수 있지만, 콘솔 창에 입력하는 값은 Console.ReadLine() 메서드를 사용하여 읽어와야 합니다.
비주얼 스튜디오에서 명령줄 인수를 입력하는 방법
이렇게 설정하면 프로그램을 실행할 때 명령줄 인수가 전달됩니다.
터미널에서 열기? 터미널에서 열기에 입력해도 명령줄 인수 입력인가?
"터미널에서 열기"는 윈도우 탐색기에서 특정 파일이나 폴더를 명령 프롬프트 또는 PowerShell에서 바로 열 수 있도록 해주는 기능입니다.
마우스 오른쪽 버튼으로 파일이나 폴더를 클릭하면 컨텍스트 메뉴가 나타나는데, 여기에 "터미널에서 열기" 옵션이 있습니다. 이 옵션을 선택하면 해당 파일이나 폴더가 있는 경로에서 명령 프롬프트 또는 PowerShell 창이 열립니다.
"터미널에서 열기"에 입력하는 내용은 명령 프롬프트 또는 PowerShell 명령어입니다. 명령줄 인수와는 다릅니다.
명령줄 인수는 프로그램을 실행할 때 프로그램에 전달하는 추가적인 정보입니다. 반면에 "터미널에서 열기"에 입력하는 명령어는 이미 실행 중인 터미널에서 실행되는 명령어입니다.
"터미널에서 열기"를 사용하면 파일이나 폴더가 있는 경로에서 바로 터미널을 열 수 있으므로, 해당 파일이나 폴더를 대상으로 하는 명령어를 쉽게 실행할 수 있습니다. 예를 들어, "터미널에서 열기"를 사용하여 특정 폴더에서 터미널을 연 후, dir 명령어를 사용하여 해당 폴더의 파일 목록을 확인할 수 있습니다.