2010-09-05 100 views
1

我知道这听起来倒退了,但我必须将它从C#转换为经典ASP。我不知道任何VBScript,所以我需要帮助。将此C#代码转换为经典ASP/VBScript?

在我的C#代码中,它正在读取配置文件中的appkeys,解析它们,并使用循环执行过程。我不知道如何在VBScript中做字典和I/O的东西。有人可以帮助这个吗?

这些都是我想我将不得不为常数变量存储在.asp文件的密钥:

<add key="Output.Size" value="550" /> 
<add key="Output.Ext" value=".jpg" /> 
<add key="Output.Folder" value="thumbs" /> 
<add key="Suffix.LG" value="750" /> 
<add key="Suffix.TN" value="250" /> 
<add key="Suffix.TNL" value="175" /> 
<add key="Suffix.TNR" value="75" /> 
<add key="Supported" value=".jpeg,.jpg,.gif,.bmp,.tiff,.png" /> 

这是C#代码:

Generate generate = new Generate(); 
generate.Process(source, destination); //inputs will be relative URL paths 

    public class Generate 
    { 
     private const string OUTPUT_SIZE_KEY = "Output.Size"; 
     private const string OUTPUT_EXT_KEY = "Output.Ext"; 
     private const string SUFFIX_KEY = "Suffix."; 
     private const string SUPPORTED_KEY = "Supported"; 
     private string[] supportedExt = null; 

     public Generate() 
     { 
      //GET ALL SUPPORTED FORMAT TYPES TO PREVENT PROCESSING ON UNSUPPORTED FILES 
      supportedExt = ConfigurationManager.AppSettings[SUPPORTED_KEY].ToLower().Split(','); 
     } 

     public void Process(string sourceDir, string destDir) 
     { 
      int thumbSize = Int32.Parse(ConfigurationManager.AppSettings[OUTPUT_SIZE_KEY]); 
      string thumbExt = ConfigurationManager.AppSettings[OUTPUT_EXT_KEY]; 

      //COLLECT VALUES FOR RESIZING 
      Dictionary<string, int> resizeValues = new Dictionary<string, int>(); 
      foreach (string item in ConfigurationManager.AppSettings.AllKeys) 
      { 
       if (item.StartsWith(SUFFIX_KEY)) 
       { 
        resizeValues.Add(item.Substring(SUFFIX_KEY.Length), Int32.Parse(ConfigurationManager.AppSettings[item])); 
       } 
      } 

      //BEGIN GENERATING THUMBS 
      foreach (string item in Directory.GetFiles(sourceDir)) 
      { 
       //VALIDATE IF FILE TYPE SUPPORTED 
       if (!supportedExt.Contains(Path.GetExtension(item.ToLower()))) 
        continue; 

       string fileName = Path.GetFileNameWithoutExtension(item); 
       string outputFile = Path.Combine(destDir, fileName + thumbExt); 

       //RESIZE TO THUMB 
       Resize(item, outputFile, thumbSize); //DO NOT HAVE TO CONVERT "RESIZE" 

       //RESIZE TO DIFFERENT THUMBS 
       foreach (KeyValuePair<string, int> output in resizeValues) 
       { 
        string thumbSeq = Path.Combine(destDir, fileName + output.Key + thumbExt); 
        Resize(item, thumbSeq, output.Value); //DO NOT HAVE TO CONVERT "RESIZE" 
       } 
      } 
     } 

UPDATE: 如下所示,我将其转换为VB以便于翻译。我似乎也必须重新思考。这是我在哪里,但我得到一个错误:

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <% 

    'DECLARE VARIABLES 
Dim outputSize 
Dim outputExt 
Dim outputSuffix() 
Dim supported 
Dim source 
Dim destination 

'INITIALIZE VALUES 
outputSize = 550 
outputExt = ".jpg" 
outputSuffix(0) = "LG.750" 
outputSuffix(1) = "TN.250" 
outputSuffix(2) = "TNL.175" 
outputSuffix(3) = "TNR.75" 
supported = ".jpeg,.jpg,.gif,.bmp,.tiff,.png" 
source = "catalog/upload" 
destination = "catalog" 

'CALL FUNCTION TO RESIZE THUMBNAILS 
Dim generate 
generate = New ThumbGenerator 
generate.Process source, destination 

'PROCESS TO RESIZE 
class ThumbGenerator 
    Dim supportedExt 

    Public Sub Process(sourceDir, destDir) 
     Dim thumbSize 
     Dim thumbExt 
     thumbSize = outputSize 
     thumbExt = outputExt 
     supportedExt = supported.ToLower().Split(",") 

     'COLLECT VALUES FOR RESIZING 
     Dim resizeValues 
     resizeValues = Dictionary(String, Integer)() 
     For Each item As String In outputSuffix 
      Dim temp 
      temp = item.Split(".") 
      resizeValues.Add(temp(0), temp(1)) 
     Next 

     'BEGIN GENERATING THUMBS 
     For Each item As String In Directory.GetFiles(sourceDir) 
      'VALIDATE IF FILE TYPE SUPPORTED 
      If Not supportedExt.Contains(Path.GetExtension(item.ToLower())) Then 
       Continue For 
      End If 

      Dim fileName 
      Dim outputFile 
      fileName = Path.GetFileNameWithoutExtension(item) 
      outputFile = Path.Combine(destDir, fileName + thumbExt) 

      'RESIZE TO THUMB 
      'Resize(item, outputFile, thumbSize) 

      'RESIZE TO DIFFERENT THUMBS 
      For Each output As KeyValuePair(Of String, Integer) In resizeValues 
       Dim thumbSeq As String = Path.Combine(destDir, fileName + output.Key + thumbExt) 
       'Resize(item, thumbSeq, output.Value) 
      Next 
     Next 
    End Sub 
End Class 
    %> 
</body> 
</html> 

这是我收到的错误:

Microsoft VBScript compilation error '800a03ea' 

Syntax error 

/sandbox/aspjpeg/Default.asp, line 45 

resizeValues = Dictionary(String, Integer)() 
----------------------------------^ 

回答

0

(我不会将它转换为你,但...)

存在几个C#< - > VB.NET转换器,例如http://converter.telerik.com/

将其转换为VB.NET后,将其转换为经典ASP/VBScript可能会稍微容易一些。

+0

谢谢,我转换它,但它仍然似乎远离ASP。我已更新我的帖子。 – TruMan1 2010-09-05 13:23:28

3

你会想重新考虑你正在做的很多事情。 .Net不会逐行转换为vbscript,甚至不会按类/模块转换为类/模块。你必须看看ASP.Net实际上在做什么,并想出如何在VBScript中做到这一点。

vbscript的一个提示是,它不是用vbscript文件io来处理配置文件,而是通过在单独的文件中定义这些变量来处理配置数据,然后将其包含在其他地方,这样更容易处理配置数据。然后,您可以像使用其他变量一样使用该数据。

+0

我把你的建议用于使用变量而不是配置文件。我想我最终可以将这些文件转移到单独的文件中,但我似乎仍需要重新思考一些基本的事情。我的文章反映了我的编辑。 – TruMan1 2010-09-05 13:24:35

1

您不能Dim一个变量,然后在vbscript的同一行上设置它的值。

昏暗outputSize作为整数 outputSize = 550

,并且不使用 “” 周围的整数。

+0

我更新了上面的代码。我找不到一种方法来使用字典或类似的东西。 – TruMan1 2010-09-05 14:28:41

+0

查看本网站http://www.devguru.com/technologies/vbscript/quickref/dictionary.html。 – 2010-09-06 08:16:30

0

您可以昏暗的变量,并通过

dim myVar : myVar = 4711

' this will create a "dictionary"

dim resizeValues : set resizeValues = server.createobject("scripting.dictionary")

0

是否需要生活在一个过去的时代分配valuy?或者仅仅是从过去的时代被召唤出来?如果后者是答案,你是否考虑过将代码移动到自己的程序集中,并使程序集COM可见,然后从所说的旧时代访问它。

0

使用常量关键字来定义常量变量。例如:

Dim outputSize, outputExt 
outputSize = 550 
outputExt = ".jpg" 

可以

Const outputSize = 550, outputExt = ".jpg" 

使用FSO对象来处理文件和文件夹。例如:

Set fso = Server.CreateObject("Scripting.FileSystemObject") 
    Set folder = fso.GetFolder(sourceDir) 
    Set files = folder.Files