폴더가없는 경우 파일과 폴더를 어떻게 만듭니 까?
다음 파일을 작성 (또는 덮어 쓰기)하고 싶다고 상상하십시오. C:\Temp\Bar\Foo\Test.txt
은 Using File.Create (..) 방법이 그것을 할 수 있습니다.
그러나 다음 폴더 중 하나가없는 경우 (위의 예제 경로에서)
- 온도
- 바
- 푸
그런 다음 DirectoryNotFoundException이 발생합니다.
.. 경로가 주어지면 해당 경로의 파일을 만드는 데 필요한 모든 폴더를 어떻게 재귀 적으로 만들 수 있습니까? Temp 또는 Bar 폴더가 있지만 Foo가 없으면 ...도 생성됩니다.
간단하게하기 위해 보안 문제가 없다고 가정합니다. 모든 권한은 괜찮습니다.
DirectoryInfo di = Directory.CreateDirectory(path);
Console.WriteLine("The directory was created successfully at {0}.",
Directory.GetCreationTime(path));
참조 이 MSDN 페이지를 .
그것이 도움이 되길 바랍니다!
다른 답변에서 언급 된 내용을 요약하려면 :
//path = @"C:\Temp\Bar\Foo\Test.txt";
Directory.CreateDirectory(Path.GetDirectoryName(path));
Directory.CreateDirectory
디렉토리를 재귀 적으로 작성하며 디렉토리가 이미 존재하는 경우 오류없이 리턴됩니다.
예외에 파일 Foo
이 C:\Temp\Bar\Foo
있으면 예외가 발생합니다.
파일을 작성하기 전에 Directory.CreateDirectory 를 사용하십시오 . 폴더가 재귀 적으로 만들어집니다.
경로의 두 부분 (디렉토리 및 파일 이름)을 확인하고 존재하지 않는 경우이를 작성해야합니다.
File.Exists
및 사용 하여 Directory.Exists
존재하는지 확인 하십시오 . Directory.CreateDirectory
전체 경로를 생성하므로 디렉토리가 존재하지 않으면 한 번만 호출하면 파일을 만들 수 있습니다.
Directory.CreateDirectory를 사용해야합니다.
http://msdn.microsoft.com/en-us/library/54a0at6s.aspx
. 경로가 주어지면 파일을 만드는 데 필요한 모든 폴더를 재귀 적으로 만들 수있는 방법
path로 지정된 모든 디렉토리 및 서브 디렉토리를 작성합니다.
Directory.CreateDirectory(path);
그런 다음 파일을 만들 수 있습니다.
여기에 다른 답변이 있지만 그중 아무것도 완료되지 않았으므로 다음 코드는 디렉토리 를 만들고 (존재하지 않는 경우) 파일 을 복사합니다 .
// using System.IO;
// for ex. if you want to copy files from D:\A\ to D:\B\
foreach (var f in Directory.GetFiles(@"D:\A\", "*.*", SearchOption.AllDirectories))
{
var fi = new FileInfo(f);
var di = new DirectoryInfo(fi.DirectoryName);
// you can filter files here
if (fi.Name.Contains("FILTER")
{
if (!Directory.Exists(di.FullName.Replace("A", "B"))
{
Directory.CreateDirectory(di.FullName.Replace("A", "B"));
File.Copy(fi.FullName, fi.FullName.Replace("A", "B"));
}
}
}
Directory.CreateDirectory ()를 원합니다.
여기에 내가 사용하는 클래스 (C #으로 변환)가 소스 디렉토리와 대상을 전달하면 해당 디렉토리의 모든 파일과 하위 폴더가 대상으로 복사됩니다.
using System.IO;
public class copyTemplateFiles
{
public static bool Copy(string Source, string destination)
{
try {
string[] Files = null;
if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) {
destination += Path.DirectorySeparatorChar;
}
if (!Directory.Exists(destination)) {
Directory.CreateDirectory(destination);
}
Files = Directory.GetFileSystemEntries(Source);
foreach (string Element in Files) {
// Sub directories
if (Directory.Exists(Element)) {
copyDirectory(Element, destination + Path.GetFileName(Element));
} else {
// Files in directory
File.Copy(Element, destination + Path.GetFileName(Element), true);
}
}
} catch (Exception ex) {
return false;
}
return true;
}
private static void copyDirectory(string Source, string destination)
{
string[] Files = null;
if (destination[destination.Length - 1] != Path.DirectorySeparatorChar) {
destination += Path.DirectorySeparatorChar;
}
if (!Directory.Exists(destination)) {
Directory.CreateDirectory(destination);
}
Files = Directory.GetFileSystemEntries(Source);
foreach (string Element in Files) {
// Sub directories
if (Directory.Exists(Element)) {
copyDirectory(Element, destination + Path.GetFileName(Element));
} else {
// Files in directory
File.Copy(Element, destination + Path.GetFileName(Element), true);
}
}
}
}
Assuming that your assembly/exe has FileIO permission is itself, well is not right. Your application may not run with admin rights. Its important to consider Code Access Security and requesting permissions Sample code:
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r");
f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");
try
{
f2.Demand();
}
catch (SecurityException s)
{
Console.WriteLine(s.Message);
}
Understanding .NET Code Access Security
'programing tip' 카테고리의 다른 글
양식 데이터 전송 요청 (0) | 2020.07.15 |
---|---|
Microsoft SQL Server로 LIMIT를 구현하는 방법은 무엇입니까? (0) | 2020.07.15 |
GET 데이터도 HTTPS로 암호화됩니까? (0) | 2020.07.15 |
네이티브 fetch () 네트워크 요청 실패 (0) | 2020.07.15 |
Oracle SELECT TOP 10 레코드 (0) | 2020.07.15 |