10/10/2018, 09:50

Hỏi về hàm random trong vb

mình đang lập trình phần admin website
Khí mình lưu một sản phẩm mới vào xảy ra trường hợp tên file hình sản phẩn vô tình bị trùng, hiện tại mình đang xữ lý theo kiểu nếu gặp file hình trùng thì xóa file hình cũ úp file hình mới.
Nhưng cách này mình thấy không khả thi, mình liền nghỉ tới hàm random để tạo số tự nhiên ghép với tên hình.

Vd: khi thêm mới một sản phẩm mới có tên hình là laptrinh.jpg thì khi lưu vào nó sẽ tự động cộng thêm một số ngẩu nhiên nào đó với tên hình thì sẽ không còn trường hợp trùng tên file hình xãy ra nữa
Mình không rõ về hàm này lắm
Bạn nào biết chỉ giúp mình

Code của mình trong phần xữ lý lưu thêm hình vào như thế này

Private Function LayAnh() As String
Dim filename As String = ""
Dim pathServer As String = ""
filename = Path.GetFileName(txtFileHinh.PostedFile.FileName)
pathServer = Server.MapPath("..VNImagesSanPhamChinh") + filename
'Thay doi
txtFileHinh.PostedFile.SaveAs(pathServer)
Return filename
End Function

bạn nào có biết chỉ dùm mình ghép thêm hàm random vào dòng (pathServer = Server.MapPath("..VNImagesSanPhamChinh") + filename) giúp mình
cảm ơn rất nhiều
thuyduongcd viết 11:50 ngày 10/10/2018
Được gửi bởi tuanhaikh
mình đang lập trình phần admin website
Khí mình lưu một sản phẩm mới vào xảy ra trường hợp tên file hình sản phẩn vô tình bị trùng, hiện tại mình đang xữ lý theo kiểu nếu gặp file hình trùng thì xóa file hình cũ úp file hình mới.
Nhưng cách này mình thấy không khả thi, mình liền nghỉ tới hàm random để tạo số tự nhiên ghép với tên hình.

Vd: khi thêm mới một sản phẩm mới có tên hình là laptrinh.jpg thì khi lưu vào nó sẽ tự động cộng thêm một số ngẩu nhiên nào đó với tên hình thì sẽ không còn trường hợp trùng tên file hình xãy ra nữa
Mình không rõ về hàm này lắm
Bạn nào biết chỉ giúp mình

Code của mình trong phần xữ lý lưu thêm hình vào như thế này

Private Function LayAnh() As String
Dim filename As String = ""
Dim pathServer As String = ""
filename = Path.GetFileName(txtFileHinh.PostedFile.FileName)
pathServer = Server.MapPath("..\VN\Images\SanPhamChinh\") + filename
'Thay doi
txtFileHinh.PostedFile.SaveAs(pathServer)
Return filename
End Function

bạn nào có biết chỉ dùm mình ghép thêm hàm random vào dòng (pathServer = Server.MapPath("..\VN\Images\SanPhamChinh\") + filename) giúp mình
cảm ơn rất nhiều
Thử dùng hàm này xem. Hàm trả về 1 chuỗi random. Hàm có 2 tham số: SIZE: độ dài chuỗi, LOWERCASE: nếu true sẽ lấy chuỗi ở lowercase)
Code:
Private Function RandomString(size As Integer, lowerCase As Boolean) As String
   Dim builder As New StringBuilder()
   Dim random As New Random()
   Dim ch As Char
   Dim i As Integer
   For i = 0 To size - 1
      ch = Convert.ToChar(Convert.ToInt32((26 * random.NextDouble() + 65)))
      builder.Append(ch)
   Next
   i If lowerCase Then
      Return builder.ToString().ToLower()
   End If
   Return builder.ToString()
End Function 'RandomString
Có chuỗi ngẫu nhiên rồi chỉ việc ghép nó vào filename thôi (Lưu ý ghép trước phần .jpg).

Bổ sung thêm: thay vì ghép vào chuỗi ngẫu nhiên, sao không lấy trực tiếp ngày giờ ngay lúc gửi cho tiện. Ngày giờ thì chắc không bao giờ trùng lặp.
tuanhaikh viết 12:01 ngày 10/10/2018
Mình cũng đã nghĩ tới cách dùng ngày giờ nhưng không biết cách ghép với tên hình như thế nào cả.

bạn hướng dẫn mình ghép với ngày giờ được không
The Old Man viết 12:00 ngày 10/10/2018
Trong database, record number không bao giờ trùng, hảy lợi dụng record number như một cái key ghi lại tính chất unique của một hồ sơ (record).

Dùng random một số hay chữ sẽ khiến cho việc index cái key random đó khó khăn hơn chưa kể là khó ghi nhớ. ví dụ như ten_mon_hangwfkgyc437
Còn dùng ngày và giờ thì cái key đó quá dài, ví dụ như ten_mon_hang1025201020:19
tuanhaikh viết 11:55 ngày 10/10/2018
Ý kiến hay.
Mình sẽ thử cách này
Nhưng mình vẫn muốn biết rõ hơn về cái hàm random này.
từ trước tới giờ mình vẫn chưa dùng nó nên còn rất bở ngở
mình muốn nhân diệp này làm cho biết luôn
Bạn có thể vi dụ đơn gian về radom được không
Cách khởi tạo, gán,....
thuyduongcd viết 12:05 ngày 10/10/2018
Code:
filename="test.jpg"
temp=System.DateTime.Now.ToLongTimeString ' lấy chuỗi ngày giờ hiện tại
newfilename= left(filename,len(filename)-4)+ temp + right(filename,4)
Đó chỉ là ý tưởng. Làm ơn kiểm tra dùm cú pháp, lâu quá không dùng VB nên không còn nhớ rõ.
tuanhaikh viết 11:57 ngày 10/10/2018
mình thấy cái gán ngày giờ tuy dài nhưng nó chắc ăn nhất
Vì hầu như khách hàng chẳng mở tên hình ra xem bao giờ
mà ghép với ngày giơ thế nào mình vẫn còn mơ hồ quá

[=========> Bổ sung bài viết <=========]

cảm ơn bạn rất nhiều
để mình làm thử xem
thuyduongcd viết 11:53 ngày 10/10/2018
Trong database, record number không bao giờ trùng, hảy lợi dụng record number như một cái key ghi lại tính chất unique của một hồ sơ (record).
Cách này không thỏa mãn nếu 1 sản phẩm có nhiều bức ảnh. Các bức ảnh này sẽ dùng chung 1 id? Chưa kể trường hợp nếu id đó có thuộc tính AUTO_INCREMENT (như trong mySQL) thì mình cũng chẳng biết id nó sẽ là bao nhiêu.
Nhưng mình vẫn muốn biết rõ hơn về cái hàm random này.
từ trước tới giờ mình vẫn chưa dùng nó nên còn rất bở ngở
mình muốn nhân diệp này làm cho biết luôn
Bạn có thể vi dụ đơn gian về radom được không
Cách khởi tạo, gán,....
Đơn giản là nó tạo ra số ngẫu nhiên thôi
Code:
Dim random As New Random()
value= random.Next(min, max) 'trả về 1 số ngẫu nhiên trong khoảng từ min - max
tuanhaikh viết 11:50 ngày 10/10/2018
cái hàm
newfilename = Left(filename, Len(filename) - 4) + temp + Right(filename, 4)
cso vấn đề hay sao đó
Mình viết lại cho hàm xữ lý ghép ngày giờ vào hình ảnh như thế này

Private Function LayAnh() As String
Dim filename As String = ""
Dim newfilename As String
Dim pathServer As String = ""
Dim temp As String
filename = Path.GetFileName(txtFileHinh.PostedFile.FileName)
temp = System.DateTime.Now.ToLongTimeString
newfilename = Left(filename, Len(filename) - 4) + temp + Right(filename, 4)
pathServer = Server.MapPath("..\VN\Images\SanPhamChinh\") + newfilename
txtFileHinh.PostedFile.SaveAs(pathServer)
Return filename
End Function


ở dưới function luuthemmoi mình gọi cái function này vào có đặt trong try,catch nhưng nó chạy hết function LayAnh() thì nó cacth ra luôn chứ không thực hiện lệnh lưu vào

[=========> Bổ sung bài viết <=========]

Dim random As New Random()
value= random.Next(min, max) 'trả về 1 số ngẫu nhiên trong khoảng từ min - max

khỏi tạo radom là như thế còn ghép cụ thể vào đoạn code của mình như thế nào bạn.

Private Function LayAnh() As String
Dim filename As String = ""
Dim pathServer As String = ""
filename = Path.GetFileName(txtFileHinh.PostedFile.FileName)
pathServer = Server.MapPath("..\VN\Images\CongTrinh\") + filename
'Thay doi
txtFileHinh.PostedFile.SaveAs(pathServer)
Return filename
End Function

ghép như thế nào để nó vẫn copy file hình đó lên server đồng thời đổi tên mới khó
thuyduongcd viết 12:00 ngày 10/10/2018
dùng msgbox() show cái newfilename ra xem có đúng ý đồ mình không là biết liền chứ gì
Bài liên quan
0