-1
votes

Supprimer les fichiers de l'annuaire MVC

code xxx

Obtenir une erreur lors de la compilation. Erreur lors du passage de paramètre à getfiles () dans la boucle de Forache, car je passe une matrice de chaîne, mais elle accepte une seule ligne signifie un seul élément. Donc, comment puis-je supprimer les fichiers spécifiques tout autre moyen de supprimer que les fichiers merci


5 commentaires

Faire le nom de fichier chèque à l'intérieur de votre boucle


De côté, vous ne semblez pas vérifier qu'un utilisateur est autorisé à accéder à cette fonction, et tout utilisateur autorisé peut effectivement supprimer efficacement tous les fichiers . Est-ce correct?


@Neil Vous avez raison mais j'ai un chèque que l'utilisateur enregistré peut accéder à cette action.so qui a raison?


Bien sûr, mais cela signifie-t-il que tout utilisateur connecté peut supprimer tous les fichiers? Par exemple. Je peux supprimer vos fichiers si je connais l'ID du produit.


@Neil Tout utilisateur enregistré a son propre enregistrement que j'ai attribué au maximum 5 fichiers à un utilisateur afin qu'un utilisateur ne puisse accéder à de propres fichiers. Et vous pouvez supprimer un maximum de 5 fichiers par rapport à n'importe quel identifiant de produit.


4 Réponses :


0
votes
foreach (FileInfo Files in Filenames)
     {
         di.GetFiles(Files).delete()

     }  

0 commentaires

0
votes

juste itérer à travers les noms de fichiers et récupérer FileInfo à l'intérieur de la boucle:

 foreach (string filename in filenames)
 {
     FileInfo[] fi = di.GetFiles(filename);
     if (fi != null && fi.Length > 0)
     {
         // Consider if you'd like to check that only one file was found
         // This might happen because GetFiles considers its input as a pattern
         // However if you are using full file names (which is most likely the case), that shouldn't be necessary
         fi[0].Delete();
     }
 }


0 commentaires

1
votes

Déplacez le nom du nom de fichier à l'intérieur de votre boucle:

var fileNames = FindImageFromDb.Select(x => x.ImageName.ToString()).ToArray();
foreach (var file in di.GetFiles())
{
    if (fileNames.Any(f => f == file.Name))
    {
        file.Delete();
    }
} 


1 commentaires

C'est bon mais problème, c'est que cela obtiendra tous les fichiers de fichiers de répertoire qui prendra du temps si vous disposez de 100 000 fichiers dans mon dossier, il obtiendra d'abord tous les fichiers afin que tous les fichiers suivent, il sera donc possible de démarrer.



0
votes

Utilisation de Lambda -

var files = di.GetFiles().Where(x => Filenames.Any(y => y == x.Name));


0 commentaires