Saya memiliki kode berikut di layanan web saya:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);
Adakah yang bisa membantu saya menyelesaikan masalah dengan pesan kesalahan ini dari baris 2 kode.
Format jalur yang diberikan tidak didukung.
Izin pada folder diatur ke akses penuh ke semua orang dan itu adalah jalur sebenarnya ke folder tersebut.
Breakpoint memberi saya nilai str_uploadpath
sebagai C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
Apa yang salah dengan string ini?
fileName
?fileName
kosong.Jawaban:
Daripada menggunakan
str_uploadpath + fileName
, coba gunakanSystem.IO.Path.Combine
sebagai gantinya:yang mengembalikan string.
sumber
using System.IO;
atas, lalu hapusstr_uploadpath + fileName
dan tulisPath.Combine(str_uploadpath, fileName)
str_uploadpath
. Apa nilainya?Saya melihat bahwa pembuatnya menemukan bahwa kesalahan terjadi ketika mencoba menyimpan nama file dengan seluruh jalur. Sebenarnya cukup memiliki
":"
nama file untuk mendapatkan kesalahan ini. Jika mungkin ada":"
di nama file Anda (misalnya jika Anda memiliki cap tanggal di nama file Anda) pastikan Anda menggantinya dengan yang lain. Yaitu:sumber
Path.GetInvalidPathChars
tetapi tidakPath.GetInvalidFileNameChars
, seperti yang terjadi pada saya.Bagi saya masalahnya adalah karakter
""
Penyematan Kiri-Ke-Kanan yang tidak terlihat oleh mata manusia .Itu macet di awal string (tepat sebelum 'D'), setelah saya salin-tempel jalan, dari tab keamanan properti file windows.
Jadi itu, sekilas identik, dua baris sebenarnya berbeda.
sumber
Jika Anda mencoba menyimpan file ke sistem file. Path.Combine bukanlah bukti peluru karena tidak akan membantu Anda jika nama file berisi karakter yang tidak valid. Berikut adalah metode ekstensi yang menghapus karakter tidak valid dari nama file:
Dan penggunaannya bisa:
sumber
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Di antara hal-hal lain yang dapat menyebabkan kesalahan ini:
Anda tidak boleh memiliki karakter tertentu dalam string PathFile lengkap.
Misalnya, karakter ini akan merusak fungsi StreamWriter:
mungkin ada karakter khusus lain yang juga merusaknya. Saya menemukan ini terjadi ketika Anda mencoba, misalnya, untuk meletakkan cap DateTime ke dalam nama file:
Salah satu cara untuk mencegah masalah ini adalah mengganti karakter masalah di NewFileOutS dengan yang jinak:
Semoga ini bisa menyelamatkan seseorang dari sakit kepala ...!
sumber
Jika Anda mendapatkan kesalahan ini di PowerShell, kemungkinan besar karena Anda menggunakan
Resolve-Path
untuk menyelesaikan jalur jarak jauh, misDalam kasus ini,
Resolve-Path
mengembalikan objek yang, ketika diubah menjadi string, tidak mengembalikan jalur yang valid. Ini mengembalikan jalur internal PowerShell:Solusinya adalah menggunakan
ProviderPath
properti pada objek yang dikembalikan olehResolve-Path
:sumber
Coba ubah:
Server.MapPath("/UploadBucket/Raw/")
untuk
Server.MapPath(@"\UploadBucket\Raw\")
sumber
MapPath
cukup pintar untuk mengetahuinya dengan cara apa pun.@
di depan string yang lolos dari itu.Ini adalah masalah saya, yang dapat membantu orang lain - meskipun itu bukan masalah OP:
Saya menentukan masalah dengan menampilkan jalur saya ke file log, dan ternyata tidak diformat dengan benar. Yang benar bagi saya cukup sederhana:
sumber
Apakah menggunakan metode Path.Combine membantu? Ini cara yang lebih aman untuk menggabungkan jalur file bersama. Bisa jadi itu mengalami masalah saat menghubungkan jalur bersama
sumber
Saya menggunakan pembuat Ekspresi (terbatas) untuk Variabel untuk digunakan dalam Tugas Sistem File sederhana untuk membuat arsip file di SSIS.
Ini adalah peretasan saya yang cepat dan kotor untuk menghapus titik dua guna menghentikan kesalahan: @ [User :: LocalFile] + "-" + REPLACE ((DT_STR, 30, 1252) GETDATE (), ":", "-") + ".xml"
sumber
Saya memiliki masalah yang sama hari ini. File yang saya coba muat ke dalam kode saya terbuka untuk diedit di Excel. Setelah menutup Excel, kodenya mulai berfungsi!
sumber
Jika nilainya adalah file url seperti file: // C: / apa saja, gunakan kelas Uri untuk menerjemahkan ke nama file biasa:
var localPath = (new Uri(urlStylePath)).AbsolutePath
Secara umum, menggunakan API yang disediakan adalah praktik terbaik.
sumber