-1
道歉,如果問題不夠清楚。 我再次改寫它.. 我想刪除服務器中的垃圾文件,在我的情況下,快捷方式文件(.lnk)等意外進入服務器。C#File.Delete表現不如預期
代碼:
try
{
//************** need to remove the Thumbs.db,.DS_Store and other sort
of junk files
//Files to Delete
if ((_configurationService.FilesToDelete != null) &&
(_configurationService.FilesToDelete != ""))
{
string filesToDelete = _configurationService.FilesToDelete;
string[] files;
if (filesToDelete.Contains(",")) // multiple files
{
files = filesToDelete.Split(',');
foreach (string f in files)
{
string[] listoffiles =
Directory.GetFiles(sourceDirectoryPath, f, SearchOption.AllDirectories);
foreach (string s in listoffiles)
{
_logger.Debug("The list of files to delete: " +
s);
fi = new FileInfo(s);
File.SetAttributes(s, FileAttributes.Normal);
File.Delete(s);
}
}
}
else // single file
{
string[] listoffiles =
Directory.GetFiles(sourceDirectoryPath, filesToDelete,
SearchOption.AllDirectories);
foreach (string s in listoffiles)
{
_logger.Debug("The list of files to delete: " + s);
fi = new FileInfo(s);
File.SetAttributes(s, FileAttributes.Normal);
File.Delete(s);
}
}
}
//Extensions to delete
if ((_configurationService.ExtensionsToDelete != null) &&
(_configurationService.ExtensionsToDelete != ""))
{
string extnToDelete =
_configurationService.ExtensionsToDelete;
if (extnToDelete.Contains(","))
{
string[] extn = extnToDelete.Split(',');
foreach (string e in extn)
{
string[] listofextn =
Directory.GetFiles(sourceDirectoryPath, e, SearchOption.AllDirectories);
foreach (string s in listofextn)
{
_logger.Debug("The list of files to delete: " +
s);
fi = new FileInfo(s);
File.SetAttributes(s, FileAttributes.Normal);
File.Delete(s);
}
}
}
else
{
string[] listofextn =
Directory.GetFiles(sourceDirectoryPath, extnToDelete,
SearchOption.AllDirectories);
foreach (string s in listofextn)
{
_logger.Debug("The list of files to delete: " + s);
fi = new FileInfo(s);
File.SetAttributes(s, FileAttributes.Normal);
File.Delete(s);
}
}
}
//*******************************
//##############################################################
##
}
catch(IOException ex)
{
_logger.Exception(ex.InnerException, "IO Exception/Pathtoolong
exception");
return Task.FromResult(true);
}
catch(System.Security.SecurityException sx)
{
_logger.Exception(sx.InnerException, "Security Exception");
return Task.FromResult(true);
}
catch (System.UnauthorizedAccessException sx)
{
_logger.Exception(sx.InnerException, "UnAuth Access Exception");
return Task.FromResult(true);
}
catch (System.ArgumentException sx)
{
_logger.Exception(sx.InnerException, "Arg Exception");
return Task.FromResult(true);
}
catch (System.NotSupportedException sx)
{
_logger.Exception(sx.InnerException, "Notsupported Exception");
return Task.FromResult(true);
}
這裏: FilesToDelete =的Thumbs.db,快捷方式gilsbrg.woff.lnk ExtensionsToDelete = .db的, .DS_Store,* LNK 的配置條目的品種。的垃圾文件擴展名。
所以要檢查我登錄到DB中的文件的路徑和路徑是完全正確的。即使這樣,文件也不會通過代碼被刪除。 File path logs
要檢查代碼是否返回錯誤,我試圖通過catch塊捕獲所有可能的錯誤 但它通過其中任何一個指示沒有錯誤。
此代碼是嘗試從服務器計算機上刪除文件的Azure工作者角色的一部分。這是什麼與文件的權限有關?
任何指導將非常有幫助。 在此先感謝。
您是否嘗試過使用文件的絕對路徑? – dcg
確實使用絕對路徑。當前文件路徑取決於工作目錄(您從中運行代碼的位置)。 – ManoDestra
你使用什麼路徑?桌面上的文件(包括鏈接)可能來自不同的物理目錄(例如,用戶的桌面和所有用戶的「共享」桌面) –