internal class Program
{
static void Main(string[] args)
{
TextEncoderSettings encoderSettings = new();
encoderSettings.AllowRange(UnicodeRanges.All);
JsonSerializerOptions settings = new()
{
WriteIndented = true,
//Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(encoderSettings),
AllowTrailingCommas = true
};
if (args.Length == 0)
{
Console.WriteLine($"{nameof(args)}가 비어있습니다. 파일 경로를 입력하세요.");
return;
}
else if (args.Length ==1)
{
Console.WriteLine(args[0]);
string argement = args[0];
if (string.IsNullOrEmpty(argement))
{
Console.WriteLine($"{nameof(argement)}가 비어있습니다. 디렉토리 또는 파일 경로를 입력하세요.");
return;
}
var getFullPath = System.IO.Path.GetFullPath(argement);
System.IO.FileInfo fileInfo = new System.IO.FileInfo(getFullPath);
var fileAttribute = fileInfo.Attributes;
Console.WriteLine(getFullPath);
if (fileAttribute is System.IO.FileAttributes.Directory)
{
var fileList = System.IO.Directory.GetFiles(getFullPath, "*", System.IO.SearchOption.TopDirectoryOnly);
var file = GetFileVersionInfos(fileList);
if (file != null)
{
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize<object>(new { count = file.Length, fileList = file }, settings).ToString());
}
}
else if (fileAttribute is System.IO.FileAttributes.Normal)
{
if (fileInfo.Exists)
{
if (fileInfo.Extension.Contains("zip", StringComparison.OrdinalIgnoreCase))
{
using var entries = System.IO.Compression.ZipFile.OpenRead(fileInfo.FullName);
var file = GetFileVersionInfos(entries.Entries);
if (file != null)
{
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize<object>(new { count = file.Length, fileList = file }, settings).ToString());
}
}
}
else
Console.WriteLine($"{fileInfo.FullName}이 없습니다.");
}
}
//Console.Read();
}
private static FileVersionInfo[] GetFileVersionInfos(string[] fileArray)
{
if (fileArray == null || !fileArray.Any())
return null;
return (from file in fileArray
let fileVersionInfo = new FileVersionInfo()
{
FullName = file,
Extension = System.IO.Path.GetExtension(file).Remove(0, 1),
LastWriteTime = System.IO.File.GetLastWriteTime(file)
}
select fileVersionInfo).ToArray();
}
private static FileVersionInfo[] GetFileVersionInfos(ReadOnlyCollection<ZipArchiveEntry> zipArchiveEntries)
{
if (zipArchiveEntries == null || !zipArchiveEntries.Any())
return null;
return (from file in zipArchiveEntries
let fileVersionInfo = new FileVersionInfo()
{
FullName = file.FullName,
Extension = System.IO.Path.GetExtension(file.FullName).Remove(0, 1),
LastWriteTime = file.LastWriteTime.DateTime
}
select fileVersionInfo).ToArray();
}
struct FileVersionInfo
{
[System.Text.Json.Serialization.JsonInclude()]
public string FullName { get; set; }
public string Extension { get; set; }
public DateTime LastWriteTime { get; set; }
public override string ToString() => $"{FullName}, {LastWriteTime}";
}
}
윈도우에서 한글이 포함된 절대 경로를 Json Serializer 하고 출력을 할 때 아래처럼 유니코드가 포함돼서 나왔습니다.
{
"count": 2,
"fileList": [
{
"FullName": "C:\\Users\\tjdsk\\Desktop\\2022\uD55C\uAE00\\test1.txt",
"Extension": "txt",
"LastWriteTime": "2022-02-11T13:55:24.3117131+09:00"
},
{
"FullName": "C:\\Users\\tjdsk\\Desktop\\2022\uD55C\uAE00\\\uD14C\uC2A4\uD2B81.txt",
"Extension": "txt",
"LastWriteTime": "2022-02-11T13:55:29.7588527+09:00"
}
]
}
위에 유니코드 말고 한글로 출력하고 싶으시면 아래 주석을 해제 하면 됩니다.
// 아래 encoderSettings 에 UnicodeRanges.All을 추가하고 JsonSerializerOptions 에 Encoder를 추가합니다.
TextEncoderSettings encoderSettings = new();
encoderSettings.AllowRange(UnicodeRanges.All);
JsonSerializerOptions settings = new()
{
WriteIndented = true,
//Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(encoderSettings), // <-
AllowTrailingCommas = true
};
{
"count": 2,
"fileList": [
{
"FullName": "C:\\Users\\tjdsk\\Desktop\\2022한글\\test1.txt",
"Extension": "txt",
"LastWriteTime": "2022-02-11T13:55:24.3117131+09:00"
},
{
"FullName": "C:\\Users\\tjdsk\\Desktop\\2022한글\\테스트1.txt",
"Extension": "txt",
"LastWriteTime": "2022-02-11T13:55:29.7588527+09:00"
}
]
}
그러면 아래처럼 한글이 포함되어서 출력이 됩니다.
'C#' 카테고리의 다른 글
[C#] string.Create (0) | 2022.02.23 |
---|---|
[C#] FormBorderStyle None 사용시 아이콘, Resize, Move, taskbar click to minimize (2) | 2022.02.18 |
[C#] .NET 6 - NativeMemory 사용 (0) | 2022.01.12 |
[C#] HttpClient download file example (2) | 2022.01.11 |
[C#] .NET 6 HttpClient - The SSL connection could not be established, see inner exception (0) | 2021.12.14 |