আমি একটি অ্যাপ তৈরি করেছি যা এসপি সাইটে সমস্ত নথি লাইব্রেরি ডাউনলোড করে, তবে এক পর্যায়ে এটি আমাকে এই ত্রুটি দেয় (আমি গুগলের দিকে তাকানোর চেষ্টা করেছি কিন্তু কিছুই খুঁজে পাচ্ছি না, এখন কেউ যদি এই সমস্যার সমাধানের জন্য কোনও কৌশল জানে তবে দয়া করে অন্যথায় প্রতিক্রিয়া জানান ধন্যবাদ এটি দেখার জন্য)
System.IO.PathTooLongException: নির্দিষ্ট পথ, ফাইলের নাম বা উভয়ই দীর্ঘ long সম্পূর্ণরূপে যোগ্যতাসম্পন্ন ফাইলের নামটি অবশ্যই 260 টির চেয়ে কম বর্ণের হতে হবে এবং ডিরেক্টরিটির নামটি 248 টির চেয়ে কম বর্ণের হতে হবে। System.IO.Pile.NormalizePathFast (স্ট্রিং পাথ, বুলিয়ান ফুলচেক) এ System.IO.Path.GetFullPathIntern (স্ট্রিং পাথ) এ System.IO.FileStream.Init (স্ট্রিং পাথ, ফাইলমোড মোড, ফাইলঅ্যাক্সেস অ্যাক্সেস, ইনট 32 রাইটস, বুলিয়ান ইউজারআরাইটস , ফাইল-শেয়ার ভাগ, Int32 বাফার সাইজ, ফাইলঅ্যাপশন বিকল্পসমূহ, SECURITY_ATTRIBUTES সেক্যাটারস, স্ট্রিং ম্যাসেজপথ, বুলিয়ান bFromProxy) এ System.IO.FileStream..ctor (স্ট্রিং পাথ, ফাইলমোড মোড, ফাইলঅ্যাক্সেস অ্যাক্সেস, ফাইল-শেয়ার শেয়ার, ফাইল-বিকল্পসমূহে ফাইল অপশন) O IO.File.Create (স্ট্রিং পাথ)
এটি স্ট্রিংয়ের সীমাতে পৌঁছেছে, কোড নীচে দেওয়া হয়েছে,
#region Downloading Schemes
private void btnDownload_Click(object sender, EventArgs e)
{
TreeNode currentNode = tvWebs.SelectedNode;
SPObjectData objectData = (SPObjectData)currentNode.Tag;
try
{
CreateLoggingFile();
using (SPWeb TopLevelWeb = objectData.Web)
{
if(TopLevelWeb != null)
dwnEachWeb(TopLevelWeb, TopLevelWeb.Title, tbDirectory.Text);
}
}
catch (Exception ex)
{
Trace.WriteLine(string.Format("Exception caught when tried to pass TopLevelWeb:{1}, Title = {2}, object data to (dwnEachWeb_method), Exception: {0}", ex.ToString(), objectData.Web, objectData.Title));
}
finally
{
CloseLoggingFile();
}
}
private void dwnEachWeb(SPWeb TopLevelWeb, string FolderName, string CurrentDirectory)
{
if (TopLevelWeb != null)
{
if (TopLevelWeb.Webs != null)
{
CurrentDirectory = CurrentDirectory + "\\" + TopLevelWeb.Title;
CreateFolder(CurrentDirectory);
foreach (SPWeb ChildWeb in TopLevelWeb.Webs)
{
dwnEachWeb(ChildWeb, ChildWeb.Title, CurrentDirectory);
ChildWeb.Dispose();
}
dwnEachList(TopLevelWeb, CurrentDirectory);
//dwnEachList(TopLevelWeb, FolderName, CurrentDirectory);
}
}
}
private void dwnEachList(SPWeb oWeb, string CurrentDirectory)
{
foreach (SPList oList in oWeb.Lists)
{
if (oList is SPDocumentLibrary && !oList.Hidden)
{
dwnEachFile(oList.RootFolder, CurrentDirectory);
}
}
}
private void dwnEachFile(SPFolder oFolder, string CurrentDirectory)
{
if (oFolder.Files.Count != 0)
{
CurrentDirectory = CurrentDirectory + "\\" + oFolder.Name;
CreateFolder(CurrentDirectory);
foreach (SPFile ofile in oFolder.Files)
{
if (CreateDirectoryStructure(CurrentDirectory, ofile.Url))
{
var filepath = System.IO.Path.Combine(CurrentDirectory, ofile.Url);
byte[] binFile = ofile.OpenBinary();
System.IO.FileStream fstream = System.IO.File.Create(filepath);
fstream.Write(binFile, 0, binFile.Length);
fstream.Close();
}
}
}
}
//creating directory where files will be download
private bool CreateDirectoryStructure(string baseFolder, string filepath)
{
if (!Directory.Exists(baseFolder)) return false;
var paths = filepath.Split('/');
for (var i = 0; i < paths.Length - 1; i++)
{
baseFolder = System.IO.Path.Combine(baseFolder, paths[i]);
Directory.CreateDirectory(baseFolder);
}
return true;
}
//creating folders
private bool CreateFolder(string CurrentDirectory)
{
if (!Directory.Exists(CurrentDirectory))
{
Directory.CreateDirectory(CurrentDirectory);
}
return true;
}
//shorting string
#endregion