private String GetRawFileNameFromBlobId(BlobId blobId, String fileName) { var id = blobId.Id; var stringPadded = String.Format("{0:D15}", id / 1000); StringBuilder directoryName = new StringBuilder(15); for (int i = 0; i < Math.Min(stringPadded.Length, 15); i++) { directoryName.Append(stringPadded[i]); if (i % _folderPrefixLength == (_folderPrefixLength - 1)) { directoryName.Append(System.IO.Path.DirectorySeparatorChar); } } var finalDirectory = Path.Combine(BaseDirectory, blobId.Format, directoryName.ToString()); Directory.EnsureDirectory(finalDirectory); return(finalDirectory + id + "." + Path.GetFileName(fileName)); }
/// <summary> /// Create a series of subdirectories that avoid cluttering thousands /// of files inside the very same folder. /// The logic is the following, we want at most 1000 file in a folder, so /// we divide the id by 1000 and we pad to 15 number, then we subdivide /// the resulting number in blok by 4, each folder will contain at maximum /// 1000 folders or files. /// </summary> /// <param name="blobId"></param> /// <returns></returns> public String GetFileNameFromBlobId(BlobId blobId) { var id = blobId.Id; var stringPadded = String.Format("{0:D15}", id / 1000); StringBuilder directoryName = new StringBuilder(15); for (int i = 0; i < Math.Min(stringPadded.Length, 15); i++) { directoryName.Append(stringPadded[i]); if (i % 3 == 2) { directoryName.Append(System.IO.Path.DirectorySeparatorChar); } } var finalDirectory = Path.Combine(_baseDirectory, blobId.Format, directoryName.ToString()); Directory.EnsureDirectory(finalDirectory); return(finalDirectory + id + ".blob"); }
public DirectoryManager(String baseDirectory, Int32 folderPrefixLength) { BaseDirectory = baseDirectory; _folderPrefixLength = folderPrefixLength; Directory.EnsureDirectory(baseDirectory); }
public DirectoryManager(String baseDirectory) { _baseDirectory = baseDirectory; Directory.EnsureDirectory(baseDirectory); }