アプリケーションでFileUploaderコントロールを使用しています。指定したフォルダにファイルを保存したい。このフォルダが存在しない場合は、まずフォルダを作成してから、このフォルダにファイルを保存します。フォルダーが既に存在する場合は、その中にファイルを保存するだけです。
どうすればできますか?
アプリケーションでFileUploaderコントロールを使用しています。指定したフォルダにファイルを保存したい。このフォルダが存在しない場合は、まずフォルダを作成してから、このフォルダにファイルを保存します。フォルダーが既に存在する場合は、その中にファイルを保存するだけです。
どうすればできますか?
回答:
他の人が言ったように、 System.IO.Directory.CreateDirectory
ただし、それが最初に存在するかどうかを確認する必要はありません。ドキュメントから
それらがすでに存在していないか、またはパスの一部が無効でない限り、パスで指定されたすべてのディレクトリが作成されます。ディレクトリがすでに存在する場合、このメソッドは新しいディレクトリを作成しませんが、既存のディレクトリのDirectoryInfoオブジェクトを返します。
http://forums.asp.net/p/1226236/2209871.aspxに従って、以下のコードを使用します。
string subPath ="ImagesPath"; // your code goes here
bool exists = System.IO.Directory.Exists(Server.MapPath(subPath));
if(!exists)
System.IO.Directory.CreateDirectory(Server.MapPath(subPath));
FileExists
、関数がスローするように設計されている場合は、(またはC#の同等の)例外をキャッチすることをお勧めします。
Exists
実際には新しい障害状態が発生します。
System.IO.Directory.CreateDirectory
。(それはより高速ですが、おそらくそれは問題ではありません)
この行を書くだけです:
System.IO.Directory.CreateDirectory("my folder");
参照:MSDNのDirectory.CreateDirectoryに関する記事
もちろん、using System.IO;
ソースファイルの先頭に書き込みDirectory.CreateDirectory("my folder");
、フォルダーを作成するたびに書き込むこともできます。
Directory.CreateDirectory
FilePathが存在しない場合に、試行して作成する方法を説明します
Directory.Exists
FilePathが存在するかどうかを確認する方法について説明します。ただし、CreateDirectoryがチェックするため、これは必要ありません。
パスがまだ存在しない場合は、次のような方法で作成できます。
using System.IO;
private void CreateIfMissing(string path)
{
bool folderExists = Directory.Exists(Server.MapPath(path));
if (!folderExists)
Directory.CreateDirectory(Server.MapPath(path));
}
if (!folderExists)
は必要ありません。
FileExists
例外(またはC#で呼び出されるもの)をスローする可能性があります
try / catch句を使用して、存在するかどうかを確認できます。
try
{
if (!Directory.Exists(path))
{
// Try to create the directory.
DirectoryInfo di = Directory.CreateDirectory(path);
}
}
catch (IOException ioex)
{
Console.WriteLine(ioex.Message);
}
if (!Directory.Exists(Path.GetDirectoryName(fileName)))
{
Directory.CreateDirectory(Path.GetDirectoryName(fileName));
}
次のコードは、存在しない場合にディレクトリを作成する、私が使用するコードの最良の行です。
System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/temp/"));
ディレクトリがすでに存在する場合、このメソッドは新しいディレクトリを作成しませんが、既存のディレクトリのDirectoryInfoオブジェクトを返します。>
string pathToNewFolder = System.IO.Path.Combine(parentFolderPath, "NewSubFolder");
DirectoryInfo directory = Directory.CreateDirectory(pathToNewFolder);
// Will create if does not already exist (otherwise will ignore)
以下のコードを使用してください。このコードを使用してファイルをコピーし、新しいフォルダーを作成しました。
string fileToCopy = "filelocation\\file_name.txt";
String server = Environment.UserName;
string newLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\file_name.txt";
string folderLocation = "C:\\Users\\" + server + "\\Pictures\\Tenders\\";
bool exists = System.IO.Directory.Exists(folderLocation);
if (!exists)
{
System.IO.Directory.CreateDirectory(folderLocation);
if (System.IO.File.Exists(fileToCopy))
{
MessageBox.Show("file copied");
System.IO.File.Copy(fileToCopy, newLocation, true);
}
else
{
MessageBox.Show("no such files");
}
}
フォルダーが画像フォルダーまたは他のフォルダーの下に表示されない場合は、このコードを使用します
string subPath = HttpContext.Current.Server.MapPath(@"~/Images/RequisitionBarCode/");
bool exists = System.IO.Directory.Exists(subPath);
if(!exists)
System.IO.Directory.CreateDirectory(subPath);
string path = HttpContext.Current.Server.MapPath(@"~/Images/RequisitionBarCode/" + OrderId + ".png");
おもしろい方法はFileUpload
、必要なメソッドでを拡張することです。
これを追加:
public static class FileUploadExtension
{
public static void SaveAs(this FileUpload, string destination, bool autoCreateDirectory) {
if (autoCreateDirectory)
{
var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination));
if (!destinationDirectory.Exists)
destinationDirectory.Create();
}
file.SaveAs(destination);
}
}
次にそれを使用します:
FileUpload file;
...
file.SaveAs(path,true);
string root = @"C:\Temp";
string subdir = @"C:\Temp\Mahesh";
// If directory does not exist, create it.
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
CreateDirectoryは、サブディレクトリの作成にも使用されます。必要なのは、このサブディレクトリが作成されるディレクトリのパスを指定することだけです。次のコードスニペットは、にMaheshサブディレクトリを作成しC:\Temp directory
ます。
// Create sub directory
if (!Directory.Exists(subdir))
{
Directory.CreateDirectory(subdir);
}
複数の答えから導き出された/組み合わせたもので、私のためにそれを実装することはこれと同じくらい簡単でした:
public void Init()
{
String platypusDir = @"C:\platypus";
CreateDirectoryIfDoesNotExist(platypusDir);
}
private void CreateDirectoryIfDoesNotExist(string dirName)
{
System.IO.Directory.CreateDirectory(dirName);
}