2017-06-14 82 views
-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工作者角色的一部分。這是什麼與文件的權限有關?

任何指導將非常有幫助。 在此先感謝。

+1

您是否嘗試過使用文件的絕對路徑? – dcg

+0

確實使用絕對路徑。當前文件路徑取決於工作目錄(您從中運行代碼的位置)。 – ManoDestra

+0

你使用什麼路徑?桌面上的文件(包括鏈接)可能來自不同的物理目錄(例如,用戶的桌面和所有用戶的「共享」桌面) –

回答

2

最可能的原因是路徑不正確。如果你不確定你的工作目錄,我會推薦使用絕對路徑。如果找不到文件,請參閱this question

您可以使用File.Exists來測試您的路徑是否正確。