Лучший способ устранить исключение слишком длинного пути к файлуC#

Место общения программистов C#
Ответить
Anonymous
 Лучший способ устранить исключение слишком длинного пути к файлу

Сообщение Anonymous »

Я создал приложение, которое загружает все библиотеки документов на сайт SP, но в какой-то момент оно выдает мне эту ошибку (я пытался поискать в Google, но ничего не нашел, теперь, если кто-нибудь знает какой-нибудь способ решения этой проблемы, пожалуйста в противном случае ответьте, спасибо, что посмотрели)


System.IO.PathTooLongException: указанный путь, имя файла или и то, и другое слишком длинны. Полное имя файла должно быть меньше 260 символов, а имя каталога должно быть меньше 248 символов.
в System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
в System.IO .Path.GetFullPathInternal(путь к строке)
в System.IO.FileStream.Init(путь к строке, режим FileMode, FileAccess доступ, права Int32, логическое значение useRights, общий ресурс FileShare, Int32ufferSize, параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, строка msgPath, логическое значение bFromProxy)
в System.IO.FileStream..ctor(String path, режим FileMode, доступ FileAccess, FileShare доля, Int32ufferSize, FileOptions options)
в System.IO.File.Create(String path)


достигается предел для строки, код приведено ниже,

#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);
Directory.CreateDirectory(baseFolder);
}
return true;
}

//creating folders
private bool CreateFolder(string CurrentDirectory)
{
if (!Directory.Exists(CurrentDirectory))
{
Directory.CreateDirectory(CurrentDirectory);
}
return true;
}

//shorting string

#endregion


Подробнее здесь: https://stackoverflow.com/questions/874 ... -exception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»