....
case "DOWNLOAD":
if (File.Exists(commandContent)) {
MessageBox.Show(commandContent);
result = System.Convert.ToBase64String(File.ReadAllBytes(commandContent)); //ERROR
result = HttpUtility.UrlEncode(result);
}
break;
При изключение от "Незаписани грешки" се казва "незаконни знаци" в пътя. MessageBox показва правилен път
C:UsersMeMyfile.exe
Опитах се да направя следното:
commandContent = commandContent.replace(@"",@"\");
result = System.Convert.ToBase64String(File.ReadAllBytes(commandContent)); //ERROR
Също така опитах следното:
commandContent = @""+commandContent+"";
result = System.Convert.ToBase64String(File.ReadAllBytes(commandContent)); //ERROR
но това не работи. И колкото по-странно е, че работи правилно както е, но веднъж направих някаква промяна по начина, по който вмъквам commandContent в db (използвайки ajax вместо редовен формуляр за подаване), този проблем се появява?
РЕДАКТИРАНЕ:
Опитах се да кодирам твърдо пътя, използвайки
commandContent = @"C:UsersMefile.exe";
Това работи правилно. Как мога да принудя променливата да не съдържа незаконни знаци?
Отговори:
6 за отговор № 1аз съм сигурен, че имате n или r или t или ... в края или началото на низ commandContent
можеш ли да направиш
System.Text.Encoding.UTF8.GetBytes (commandContent)
и да проверите всеки байт?
може би повикването ajax не прави подходящ низ / пътека
можете да използвате това, за да намерите кой
class Program
{
static void Main(string[] args)
{
var commandContent = "C:\Users\Me\file.exen";
var commandContentBytes = System.Text.Encoding.UTF8.GetBytes(commandContent);
var invalidPathChars = System.IO.Path.GetInvalidPathChars().Select(x=>Convert.ToByte(x));
var found = commandContentBytes.Intersect(invalidPathChars);
}
}