Avatar billede yalayala Nybegynder
04. december 2008 - 14:09 Der er 10 kommentarer og
1 løsning

Læg _1 til filnavnet, når der uploades filer med samme navn ?

Er igang med at lave et galleri i ASP.NET hvor jeg vil have lagt _1 + til i enden, af en fil der uploads med samme navn fks. nicebil.jpg > nicebil_1.jpg > nicebil_2.jpg ?

Min upload funktion ser pt. sådan her ud:

Function UploadFil(ByVal fileUpload1 As System.Web.HttpPostedFile, ByVal OutputPath As String) As Boolean


Dim strFileName As String
Dim strLongFilePath As String

If Not (fileUpload1 Is Nothing) Then


strLongFilePath = fileUpload1.FileName

strFileName = Path.GetFileName(strLongFilePath)

strFileName = Replace(strFileName, " ", "_")
strFileName = Replace(strFileName, "æ", "ae")
strFileName = Replace(strFileName, "ø", "oe")
strFileName = Replace(strFileName, "å", "aa")

fileUpload1.SaveAs(OutputPath & strFileName)
Return True
End If

Return False

End Function


Tak fordi du kikkede, håber du kan hjælpe mig ;b
Avatar billede kalp Novice
04. december 2008 - 15:43 #1
FileInfo fileToCopy = new FileInfo(@"C:\xxxx\fil.txt");
            string dir = @"C:\xxxx\";
            if (File.Exists(fileToCopy.FullName)) {
                string filename = Path.GetFileNameWithoutExtension(fileToCopy.FullName);
                int counter = 0;
                string tmpfile = string.Empty;
                while (true) {
                    counter++;
                    tmpfile = filename + "_" + counter.ToString() + Path.GetExtension(fileToCopy.FullName);
                    if (!File.Exists(dir+tmpfile)) break;
                }
                fileToCopy.CopyTo(dir + tmpfile);
            }
Avatar billede kalp Novice
04. december 2008 - 15:44 #2
Du kan så lige skrive det pænere til..
Jeg satte bare hurtigt logikken sammen..
Det burde være okay.

ellers spørg.
Avatar billede kalp Novice
04. december 2008 - 15:45 #3
Hele programmet i en consol app.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace LocateFreeName {
    class Program {
        static void Main(string[] args) {
            FileInfo fileToCopy = new FileInfo(@"C:\xxxx\fil.txt"); //RET MIG
            string dir = @"C:\xxxx\"; //RET MIG
            if (File.Exists(fileToCopy.FullName)) {
                string filename = Path.GetFileNameWithoutExtension(fileToCopy.FullName);
                int counter = 0;
                string tmpfile = string.Empty;
                while (true) {
                    counter++;
                    tmpfile = filename + "_" + counter.ToString() + Path.GetExtension(fileToCopy.FullName);
                    if (!File.Exists(dir+tmpfile)) break;
                }
                fileToCopy.CopyTo(dir + tmpfile);
            }
        }
    }
}
Avatar billede yalayala Nybegynder
05. december 2008 - 11:57 #4
Kanon kalp ;D men glemte at skrive, jeg koder i VB og ikke C# og at det skal bruges på en hjemmeside, så forstår ikke lige helt det med "consol app" og hvordan jeg skal relatere det til det jeg har i forvejen, hvor jeg bruger OutputPath og fileUpload1 til at lave stien til filen og output'et ?

Vi være rart hvis du lige ville forklare det for mig kalp :)
Avatar billede kalp Novice
05. december 2008 - 13:06 #5
Skrevet om til VB.

test det af.. der er ikke så meget og sige.
I min kode er dette den vigtige for dig.
fileToCopy.CopyTo(dir + tmpfile)

som svarer til din

fileUpload1.SaveAs(OutputPath & strFileName)


Imports System.IO

Partial Class _Default
    Inherits System.Web.UI.Page
    Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileToCopy As New FileInfo("C:\xxxx\test.xml")
        Dim dir As String = "C:\xxxx\"
        If File.Exists(fileToCopy.FullName) Then
            Dim filename As String = Path.GetFileNameWithoutExtension(fileToCopy.FullName)
            Dim counter As Integer = 0
            Dim tmpfile As String = String.Empty
            While (True)
                counter += 1
                tmpfile = filename + "_" + counter.ToString() + Path.GetExtension(fileToCopy.FullName)
                If File.Exists(dir + tmpfile) = False Then
                    Exit While
                End If
            End While
            fileToCopy.CopyTo(dir + tmpfile)
        End If
    End Sub
End Class
Avatar billede yalayala Nybegynder
05. december 2008 - 15:44 #6
Mange tak ;D nu virker det! har lavet det sådan her

If Not (fileUpload1 Is Nothing) Then
            If File.Exists(fileUpload1.FileName) Then
                Dim filename As String = Path.GetFileNameWithoutExtension(fileUpload1.FileName)
                Dim counter As Integer = 0
                Dim strFileName As String = String.Empty

                While (True)

                    counter += 1
                    strFileName = filename & "_" & counter.ToString() + Path.GetExtension(fileUpload1.FileName)
                    If File.Exists(OutputPath & strFileName) = False Then
                        Exit While
                    End If

                End While

                strFileName = Replace(strFileName, " ", "_")
                strFileName = Replace(strFileName, "æ", "ae")
                strFileName = Replace(strFileName, "ø", "oe")
                strFileName = Replace(strFileName, "å", "aa")

                fileUpload1.SaveAs(OutputPath & strFileName)
                Return True
            End If
        End If

        Return False

    End Function

Men Kunne så godt tænke mig, at få det nye filnavn retuneret, så jeg kan bruge det til indskrivningen i databasen samt min Thumbnail ReSize function.

PT. retunere den "True" som jeg ikke kan ændre til strFileName, uden at få fejlen "kan ikke ændres til boolean" ?
Avatar billede yalayala Nybegynder
05. december 2008 - 15:47 #7
Hvordan Giver jeg dig de 200point for at have løst mit problem :) ?
Avatar billede kalp Novice
05. december 2008 - 16:10 #8
For at give mig point skal du markere mit navn i boksen nede i venstre hjørne:) Mit navn står i en boks som du kan trykke på. Efterfølgende trykker du bare på knappen "Accepter svar":)

I øvrigt kan jeg ikke se hele din kode.. Det ser i hvertfald ikke sådan ud.
(programmere ikke VB.NET).

men jeg vil mene at din function ender med noget lignende:
Public Function metodenavn() As Boolean

Det skal ændres til:

Public Function metodenavn() As String

og så kan du skrive Return strFileName
:)
Avatar billede yalayala Nybegynder
06. december 2008 - 12:05 #9
Nej det er hele min kode og nu kører det bare, mange tak for de hurtige svar kalp :)
Avatar billede kalp Novice
06. december 2008 - 13:56 #10
ingen årsag og tak for point:)
Avatar billede arne_v Ekspert
08. december 2008 - 03:19 #11
Man må kunne erstatte if & while med kun while.

            string fnm = @"C:\z.cs";
            string first = Path.Combine(Path.GetDirectoryName(fnm), Path.GetFileNameWithoutExtension(fnm));
            string last = Path.GetExtension(fnm);
            string tmpfnm = fnm;
            int n = 0;
            while (File.Exists(tmpfnm))
            {
                n++;
                tmpfnm = first + "_" + n + last;
            }
            Console.WriteLine(tmpfnm);

og

            Dim fnm As String = "C:\z.cs"
            Dim first As String = Path.Combine(Path.GetDirectoryName(fnm), Path.GetFileNameWithoutExtension(fnm))
            Dim last As String = Path.GetExtension(fnm)
            Dim tmpfnm As String = fnm
            Dim n As Integer = 0
            While File.Exists(tmpfnm)
                n += 1
                tmpfnm = first & "_" & n & last
            End While
            Console.WriteLine(tmpfnm)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester